一分鐘瞭解PHP

PHP5編輯php

PHP5在長時間的開發及多個預發佈版本後,2004年7月13日,PHP5.0發佈。該版本以Zend引擎Ⅱ爲引擎,而且加入了新功能如PHP Data Objects(PDO)。PHP5.0版本強化更多的功能。首先,徹底實現面向對象,提供名爲PHP兼容模式的功能。其次是XML功能,PHP5.0版本支持可直觀地訪問XML數據、名爲SimpleXML的XML處理用界面。同時還強化了XMLWeb服務支持,並且標準支持SOAP擴展模塊。數據庫方面,PHP新版本提供旨在訪問MySQL的新界面——MySQL。除此前的界面外,還可使用面向對象界面和預處理語句(Prepared Statement)等MySQL的新功能.另外,PHP5.0上還捆綁有小容量RDBMS-SQLite.html

新對象模式前端

*構造函數析構函數 * 對象的引用 * 對象的克隆 * 對象中的私有、公共及受保護模式 * 接口 (Interfaces)linux

* 抽象類 * __call * __set 和 __get * 靜態成員nginx

構造函數和析構函數程序員

在 PHP4 中,當函數與對象同名時,這個函數將成爲該對象的構造函數,而且在 PHP4 中沒有析構函數的概念。web

在 PHP5 中,構造函數被統一命名爲 __construct,而且引入了析構函數的概念,被統一命名爲 __destruct。thinkphp

對象的引用數據庫

在PHP4中,傳遞變量給一個函數或方法,實際是把這個變量作了一次複製,也就意味着你傳給函數或方法的是這個變量的一個副本,除非你使用了引用符號「&;」 來聲明是要作一個引用,而不是一個 Copy。在 PHP5中,對象老是以引用的形式存在的,對象中的賦值操做一樣也都是一個引用操做。apache

對象的克隆

當一個對象始終以引用的形式來被調用時,若是我想獲得該對象的一個副本,該怎麼辦呢?PHP5 提供了一個新的功能,就是對象的克隆,語法爲 __clone。

抽象

抽象類不能被實例化。

抽象類與其它類同樣,容許定義變量及方法。

抽象類一樣能夠定義一個抽象的方法,抽象類的方法不會被執行,不過將有可能會在其派生類中執行。

__call

PHP5 的對象新增了一個專用方法 __call(),這個方法用來監視一個對象中的其它方法。若是你試着調用一個對象中不存在的方法,__call 方法將會被自動調用。

__set  __get

這是一個很棒的方法,__set 和 __get 方法能夠用來捕獲一個對象中不存在的變量和方法。

類型指示

在 PHP5 中,你能夠在對象的方法中指明其參數必須爲另外一個對象的實例。

靜態成員

靜態成員和靜態方法在面象對象編程的術語中被稱做 「類方法(class methods)」 和 「類變量(class variables)」。

「類方法」 在一個對象沒有實例化前容許被調用。一樣,「類變量」 在一個對象沒有實例化前能夠被獨立操做控制(不須要用一個對象的方法來控制)。

異常處理

異常處理是公認的處理程序錯誤的理想方法,在 Java及 C 中都有這個概念,咱們欣喜的看到,在 PHP5 已經加入了這方面的應用。你能夠嘗試使用 「try」 和 「catch」 來控制程序的錯誤。當有錯誤發生的時候,代碼會把錯誤交給 「catch」 子句來處理,在 「catch」 子句中,你須要指明要把錯誤交給某個對象處理,這樣作可使代碼結構看起來更清晰,由於咱們能夠把全部的錯誤信息交給一個對象來處理。

自定義錯誤處理

你能夠很方便的用自定義的處理錯誤的代碼來控制你的程序中的意外。你僅僅須要從異常類中派生出一個本身的錯誤控制類,在你本身的錯誤控制類中,你須要有一個構造函數和一個 getMessage 方法。

命名空間

名稱空間對類的分組或函數分組頗有用。它能夠把一些相關的類或函數給組合到一塊兒,方便之後調用。

例:名稱空間

 1 <?php
 2 namespacemy\name;//參考"定義命名空間"小節
 3 classMyClass{}
 4 function myfunction(){}
 5 constMYCONST=1;
 6 $a=newMyClass;
 7 $c=new\my\name\MyClass;//參考"全局空間"小節
 8 $a=strlen('hi');//參考"使用命名空間:後備全局函數/常量"小節
 9 $d=namespace\MYCONST;//參考"namespace操做符和__NAMESPACE__常量」小節
10 $d=__NAMESPACE__.'\MYCONST';
11 echo constant($d);//參考"命名空間和動態語言特徵"小節
12 ?>

注意你須要在何種狀況下使用名稱空間,在實際運用中,你可能會須要聲明兩個或多個名稱同樣的對象來作不一樣的事情,那麼你就能夠把他們分別放到不一樣的名稱空間中去(但接口是要相同的)。

加密

從PHP5.3開始支持ZendGuard加密方式,必須安裝Zend Guard Loader,老的zend optimizer將不被支持。

Linux安裝Zend Guard Loader支持的過程:

操做系統爲CentOS5.5,PHP版本爲5.3.8(CentOS5.5中的PHP默認版本較低,若是要升級到PHP最新版,可使用remi的report源進行升級)。

Windows 下面的 Zend Guard Loader 不支持php5.3.8 VC9 x86 Thread Safe而,php5.3.8 VC9 x86 Non Thread Safe 又不支持 apache。因此安裝的話,就須要安裝在iis或者和nginx搭配。

一、下載最新的Linux操做系統系下的Zend Guard Loader。

二、上傳至Linux服務器並解壓縮,注意閱讀生成目錄下的README文件。全文以下(添加必要的註釋)。在/etc/php.d/目錄下建立文件zend.ini,內容以下:

1 zend_extension=/usr/lib64/php/modules/ZendGuardLoader.so

注意路徑必定要寫上,剛開始沒寫路徑,總是加載不上ZendGuardLoader .so,也能夠直接將上面的配置寫入/etc/php.ini文件中,效果同樣。

三、重啓httpd服務:service httpd restart。

4.輸出<?php phpinfo(); ?>

 

相關語法及概念

php 支持八種原始類型。

四種標量類型:boolean(布爾型) integer(整型) float(浮點型,也做「double」) string(字符串)

兩種複合類型:array(數組)object(對象)

最後是兩種特殊類型:resource(資源)NULL

爲了確保代碼的易讀性,本手冊還介紹了一些僞類型:mixed、number、callback

語法(例子中均忽略了PHP代碼邊界符 <?php ?>):

註釋的語法有三種:

1 //comment這個是單行註釋
2 /*comment
  這個是多行註釋
  */3 #comment這個是腳本類型註釋,不多用

基本的結構控制語句:

 1 //分支結構(選擇結構)
 2  
 3 if(condition){
 4  
 5 //Statement
 6  
 7 }
 8  
 9 if(condition){
10  
11 //Statement
12  
13 }else{
14  
15 //Statement
16  
17 }
18  
19 if(condition){
20  
21 //Statement
22  
23 }elseif(condition){
24  
25 //Statement
26  
27 }
28 //多分支結構
29 switch($變量){
30 case'值':
31 //Statement
32 break;
33 case'值2':
34 //Statement
35 break;
36 default:
37 //Statement
38 }
39  
40 //循環結構
41  
42 while(condition){
43 //Statement
44 }
45  
46  
47 do{
48 //Statement
49 }while(condition);
50  
51  
52 for(初始化;判斷;變化){
53 //Statement
54 }
55  
56  
57 //數組遍歷專用循環語句
58  
59 foreach($Arrayas$value){
60 echo$value;
61 }
62  
63 foreach($Arrayas$key=>$value){
64 echo$key;
65 echo$value;
66 }

一個PHP實例:

 1 <html>
 2 <head>
 3 <title>Firstprogram</title>
 4 </head>
 5 <body>
 6 //php中string類型的拼接符和其它大多數採用"+"號運算符不同,而是採用"."號運算
 7 //在通常語言中用於對象屬性和方法調用的"."運算符,則和C語言的結構體同樣用"=>"
 8 <?php
 9 echo"helloworld"."!";
10 ?>
11 </body>
12 </html>

php對面向對象的支持

面向對象編程的概念:

不一樣的做者之間說法可能不同,可是一個OOP語言必須有如下幾方面:

1.抽象數據類型和信息封裝

2.繼承

3.多態

在PHP中是經過類來完成封裝的:

 1 //在OOP類中,一般採用大雙駝峯命名法,每一個單詞的首字母都大寫
 2 classSomething{
 3 //做用域修飾符:public公共的;private私有的;protected受保護的;
 4 //屬性的名稱通常用全小寫
 5 private$x=null;//在編程建議中,內部使用的屬性應該給私有修飾符,而後經過方法取值賦值
 6  
 7 //方法的名稱通常用小駝峯命名法,第一個單詞全小寫,剩下的單詞首字母大寫
 8 //由於PHP不會自動爲變量使用$this因此必須主動加上$this僞變量來指向操做的對象
 9 publicfunctionsetX($v){
10 $this->x=$v;
11 }
12 publicfunctiongetX(){
13 return$this->x;
14 }
15 }

固然你能夠按本身的喜愛進行定義,但最好保持一種標準,這樣會更有效。數據成員在類中使用"var"聲明來定義,在給數據成員賦值以前,它們是沒有類型的。一個數據成員能夠是一個整數,一個數組,一個相關數組(associative array)或者是一個對象。方法在類中被定義成函數形式,在方法中訪問類成員變量時,你應該使用$this->name,不然對一個方法來講,它只能是局部變量

使用new操做符來建立一個對象:

$obj=newSomething;

而後你可使用成員函數經過:

$obj->setX(5);
$see=$obj->getX();
echo$see;

在這個例子中,setX成員函數將5賦值給對象的成員變量x(不是類的),而後getX返回它的值5。能夠象:$obj->x=6那樣經過類引用方式來存取數據成員,這不是一個很好的OOP習慣。我強烈建議經過方法來存取成員變量。若是你把成員變量當作是不可處理的,而且只經過對象句柄來使用方法,你將是一個好的OOP程序員。不幸的是,PHP不支持聲明私有成員變量,因此不良代碼在PHP中也是容許的。繼承在PHP中很容易實現,只要使用extends關鍵字。

 1 classAnotherextendsSomething{
 2 private$y;
 3  
 4 publicfunctionsetY($v){
 5 $this->y=$v;
 6 }
 7 functiongetY(){
 8 return$this->y;
 9 }
10 }

"Another"類的對象擁有了父類(Something)的所有的數據成員及方法,並且還加上了本身的數據成員和方法。

你可使用

1 $obj2=newAnother;
2 $obj2->setY(5);
3 echo$obj2->getY();

PHP只支持單繼承,因此你不能從兩個或兩個以上類派生出新的類來。你能夠在派生類中重定義一個方法,若是咱們在"Another"類中重定義了getX方法(方法重寫),咱們就不能使 用"Something"中的getX方法了。若是你在派生類中聲明瞭一個與基派同名的數據成員,那麼當你處理它時, 它將「隱藏」基類的數據成員。

你能夠在你的類中定義構造函數。構造函數是一個與類名同名的方法,當你建立一個類的對象時會被調用,例如:

 1 classSomething{
 2 private$x=null;
 3  
 4 //新版本的構造函數放棄使用類名,而統一使用__construct()
 5 publicfunction__construct($x){
 6 $this->x=$x;
 7 }
 8 publicfunctionsetX($v){
 9 $this->x=$v;
10 }
11 publicfunctiongetX(){
12 return$this->x;
13 }
14  
15 //析構函數
16 publicfunction__destruct(){
17  
18 }
19 }

因此你能夠建立一個對象,經過:

$obj=newSomething(6);

構造函數會自動地把6賦值給數據變量x。構造函數和方法都是普通的PHP函數(」__「兩個下劃線,魔術方法),因此你可使用缺省參數

publicfunction__construct($x="3",$y="5"){
}

接着:

$obj=newSomething();//x=3andy=5
$obj=newSomething(8);//x=8andy=5
$obj=newSomething(8,9);//x=8andy=9

缺省參數使用C++的方式,因此你不能忽略Y的值,而給X一個缺省參數,參數是從左到右賦值的,若是傳入的參數少於要求的參數時,其做的將使用缺省參數。

當一個派生類的對象被建立時,只有它的構造函數被調用,父類的構造函數沒被調用,若是你想調用基類的構造函數,你必需要在派生類的構造函數中用parent::__construct()調用。能夠這樣作是在派生類中全部父類的方法都是可用的。

1 class Another extends Something{
2   public function__construct(){
3     parent::__construct(5,6);//顯示調用基類構造函數
4   }
5 }

OOP的一個很好的機制是使用抽象類。抽象類是不能實例化,只能提供給派生類一個接口。設計者一般使用抽象類來強迫程序員從基類派生,這樣能夠確保新的類包含一些期待的功能。在PHP中沒有標準的方法,可是:若是你須要這個特性,能夠經過定義基類,並在它的構造函數後加上"die" 的調用,這樣就能夠保證基類是不可實例化的,在每個方法(接口)後面加上"die" 語句,因此,若是一個程序員在派生類中沒有覆蓋方法,將引起一個錯誤。並且由於PHP 是無類型的,你可能須要確認一個對象是來自於你的基類的派生類,那麼在基類中增長一個方法來實義類的身份(返回某種標識id),而且在你接收到一個對象參數時校驗這個值。固然,若是一個很差的邪惡程序員在派生類中覆蓋了這個方法,這種方法就不起做用了,不過通常問題多在懶惰的程序員身上,而不是邪惡的程序員。

固然,可以讓基類對程序員沒法看到是很好的,只要將接口打印出來作他們的工做就能夠了。PHP 5 引入了析構函數的概念,這相似於其它面向對象的語言,如 C++。析構函數會在到某個對象的全部引用都被刪除或者當對象被顯式銷燬時執行。[3] 

重載(與覆蓋不一樣)在PHP中不支持,由於PHP是弱類型語言。在OOP中,你能夠重載一個方法來實現兩個或重多的方法具備相同的名字,可是有不一樣數量或類型的參數(這要看語言)。PHP 是一種鬆散類型的語言,因此經過類型重載不起做用,然而經過參數的個數不一樣來重載也不起做用。

有時在OOP中重載構造函數很是好,這樣你能夠經過不一樣的方法建立對象(變量函數)。在PHP中實現它的技巧是:

 1 class Myclass{
 2 public function Myclass(){
 3 $name="Myclass".func_num_args();//這個函數返回的是傳過來參數的個數
 4 $this->$name();//這裏使用的是一個變量函數,以這個變量的值做爲函數的名稱調用
 5 }
 6 public function Myclass1($x){
 7 //code
 8 }
 9 public function Myclass2($x,$y){
10 //code
11 }
12 }

經過在類中的額外的處理,使用這個類對用戶是透明的:

1 $obj1=newMyclass('1');//將調用Myclass1
2 $obj2=newMyclass('1','2');//將調用Myclass2

有時這個很是好用。

多態

多態是對象的一種能力,它能夠在運行時刻根據傳遞的對象參數,決定調用哪個對象的方法。例如,若是你有一個figure的類,它定義了一個draw的方法。而且派生了circle和rectangle 類,在派生類中你覆蓋了draw方法,你可能還有一個函數,它但願使用一個參數x,而且能夠調用$x->draw()。若是你有多態性,調用哪一個draw方法就依賴於你傳遞給這個函數的對象類型。

多態性在象PHP這樣的解釋語言(想象一下一個C++編譯器生成這樣的代碼,你應該調用哪個方法?你也不知道你擁有的對象是什麼類型的,好,這不是重點)是很是容易和天然的。因此PHP固然支持多態性。

 1 classCalc{
 2 functionniceDrawing($x){//假設這是Board類的一個方法
 3 $x->draw();
 4 }
 5 }
 6  
 7 classCircle{
 8 publicfunctiondraw(){
 9 echo"畫了一個圓";
10 }
11 }
12  
13 classRectangle{
14 publicfunctiondraw(){
15 echo"畫了一個矩形";
16 }
17 }
18 $board=newCalc;
19 $obj=newCircle(3,187);
20 $obj2=newRectangle(4,5);
21 $board->niceDrawing($obj);//將調用Circle的draw方法
22 $board->niceDrawing($obj2);//將調用Rectangle的draw方法

用PHP進行面向對象編程

一些"純化論者(purists)"可能會說PHP不是一個真正的面向對象的語言,這是事實。PHP 是一個混合型語言,你可使用OOP,也可使用傳統的過程化編程。然而,對於大型項目,你可能想/須要在PHP 中使用純的OOP去聲明類,並且在你的項目只用對象和類。

隨着項目愈來愈大,使用OOP可能會有幫助,OOP代碼很容易維護,容易理解和重用。這些就是軟件工程的基礎。在基於web的項目中應用這些概念就成爲未來網站成功的關鍵。

高級OOP技術

在看過基本的OOP概念後,我就能夠向你展現更高級的技術:

序列化(Serializing)

PHP不支持永久對象,在OOP中永久對象是能夠在多個應用的引用中保持狀態和功能的對象,這意味着擁有將對象保存到一個文件或數據庫中的能力,並且能夠在之後裝入對象。這就是所謂的序列化機制。PHP 擁有序列化方法,它能夠經過對象進行調用,序列化方法能夠返回對象的字符串表示。然而,序列化只保存了對象的成員數據而不包括方法。

在PHP4中,若是你將對象序列化到字符串$s中,而後釋放對象,接着反序列化對象到$obj,你能夠繼續使用對象的方法!我不建議這樣去作,由於(a)文檔中沒有保證這種行爲在之後的版本中仍然可使用。(b) 這個可能致使一種誤解,在你把一個序列化後的版本保存到磁盤並退出腳本時。當之後運行這個腳本時,你不能期待着在反序列化一個對象時,對象的方法也會在那裏,由於字符串表示根本就不包括方法。

總而言之,PHP 進行序列化對於保存對象的成員變量很是有用。(你也能夠將相關數組和數組序列化到一個文件中)。

例子 :

1 $obj=newClassfoo();
2 $str=serialize($obj);//保存$str到磁盤上
3 $obj2=unserialize($str);//幾個月之後//從磁盤中裝入str

你恢復了成員數據,可是不包括方法(根據文檔所說)。這致使了只能經過相似於使用$obj2->x來存取成員變量(你沒有別的方法!)的惟一辦法,因此不要在家裏試它。

有一些辦法能夠解決這個問題,我把它留着,由於對這篇簡潔的文章來講,他們太很差。我會很高興地歡迎在PHP的後續版本中有全序列化的特性。

使用類進行數據存儲PHP和OOP一件很是好的事情就是,你能夠很容易地定義一個類來操做某件事情,而且不管什麼時候你想用的時候均可以調用相應的類。假設你有一個HTML表單,用戶能夠經過選擇產品ID號來選擇一個產品。在數據庫中有產品的信息,你想把產品顯示出來,顯示它的價格等等。你擁有不一樣類型的產品,而且同一個動做可能對不一樣的產品具備不一樣的意思。例如,顯示一個聲音可能意味着播放它,可是對於其它種類的產品可能意味着顯示一個存在數據庫中的圖片。你可使用OOP或PHP來減小編碼並提升質量:

定義一個產品的類,定義它應該有的方法(例如:顯示),而後定義對每一種類型的產品的類,從產品類派後出來(SoundItem類,ViewableItem類,等等),覆蓋在產品類中的方法,使它們按你的想法動做。

根據數據庫中每一種產品的類型(type)字段給類命名,一個典型的產品表可能有(id,type,price,description,等等字段)...而後在處理腳本中,你能夠從數據庫中取出type值,而後實例化一個名爲type的對象:

1 $obj=new$type();
2 $obj->action();

這是PHP的一個很是好的特性,你能夠不用考慮對象的類型,調用$obj的顯示方法或其它的方法。使用這個技術,你不須要修改腳本去增長一個新類型的對象,只是增長一個處理它的類。

這個功能很強大,只要定義方法,而不去考慮全部對象的類型,在不一樣的類中按不一樣的方法實現它們,而後在主腳本中對任意對象使用它們,沒有if...else,也不須要兩個程序員,只有高興。

你贊成編程是容易的,維護是便宜的,可重用是真的嗎?

若是你管理一組程序員,分配工做就是很簡單的了,每一個人可能負責一個類型的對象和處理它的類。

能夠經過這個技術實現國際化,根據用戶所選的語言字段應用相應的類就能夠了,等等。

拷貝和克隆

當你建立一個$obj的對象時,你能夠經過$obj2=$obj來拷貝對象,新的對象是$obj的一個拷貝(不是一個引用),因此它具備$obj在當時的狀態。有時候,你不想這樣,你只是想生成一個象obj類同樣的一個新的對象,能夠經過使用new語句來調用類的構造函數。在PHP中也能夠經過序列化,和一個基類來實現,但全部的其它類都要從基類派生出來。

進入危險區域

當你序列化一個對象,你會獲得某種格式的字符串,若是你感興趣,你能夠調究它,其中,字符串中有類的名字(太好了!),你能夠把它取出來,象:

1 $herring=serialize($obj);
2 $vec=explode(':',$herring);//以:爲標識符把字符串拆分紅一個數組
3 $nam=str_replace("\",'',$vec[2]);

因此假設你建立了一個"Universe"的類,而且強制全部的類都必須從universe擴展,你能夠在universe 中定義一個clone的方法,以下:

 1 classUniverse{
 2  
 3 //在新的PHP版本中克隆(__clone())是一個魔術方法,不要和這個方法搞混了
 4  
 5 functionclone(){
 6  
 7 $herring=serialize($this);
 8  
 9 $vec=explode(':',$herring);
10  
11 $nam=str_replace("\"",'',$vec[2]);
12  
13 $ret=new$nam;
14 return$ret;
15  
16 }
17  
18 }//而後
19  
20 $obj=newSomething();//從Universe擴展
21  
22 $other=$obj->clone();

你所獲得的是一個新的Something類的對象,它同使用new方法,調用構造函數建立出的對象同樣。我不知道這個對你是否有用,可是Universe類能夠知道派生類的名字是一個好的經驗。想象是惟一的限制。

模板引擎

  • Smarty:Smarty的特色是將模板編譯成PHP腳本,而後執行這些腳本。很快,很是方便。
  • Heyes Template Class:一個很是容易使用,但功能強大而且快速的模板引擎,它幫助你把頁面佈局和設計從代碼中分離。
  • FastTemplate:一個簡單的變量插值模板類,它分析你的模板,把變量的值從HTML代碼中分離處理。
  • ShellPage:一個簡單易用的類,可讓你的整個網站佈局基於模板文件,修改模板就能改變整個站點。
  • STP Simple Template Parser:一個簡單、輕量級而且易於使用的模板分析類。它能夠從多個模板中組裝一個頁面,把結果頁面輸出到瀏覽器或者文件系統。
  • OO Template Class:一個你能夠用在本身程序中的面向對象的模板類。
  • SimpleTemplate:一個能夠建立和結構化網站的模板引擎。它能夠解析和編譯模板。
  • bTemplate:短小可是快速的模板類,容許你把PHP邏輯代碼從HTML修飾代碼中分離。
  • Savant:一個強大且輕量級的PEAR兼容模板系統。它是非編譯型的,使用PHP語言自己作爲它的模板語言。
  • ETS - easy template system:可使用徹底相同數據重組模板的模板系統。
  • EasyTemplatePHP:適用於你的站點的一個簡單可是強大的模板系統。
  • vlibTemplate:一個快速、全能的模板系統,它包含一個緩存和調試類。
  • AvanTemplate:多字節安全的模板引擎,佔用不多系統資源。它支持變量替換,內容塊能夠設置顯示或隱藏
  • Grafx Software’s Fast Template:一個修改版本的Fast Template系統,它包括緩存功能,調試控制檯以及沉默去除爲賦值塊。
  • TemplatePower:一個快速、簡單、功能強大的模板類。主要功能有嵌套的動態塊支持,塊/文件包含支持以及顯示/隱藏未賦值的變量。
  • TagTemplate:這個庫的功能被設計來使用模板文件,同時容許你從HTML文件檢索信息。
  • htmltmpl: templating engine:一個適用於Python和PHP的模板引擎。它面向但願在項目中分離代碼和設計的web應用開發人員。
  • PHP Class for Parsing Dreamweaver templates:一個分析Dreamweaver模板的簡單類,被用於Gallery 2 和WordPress的自定義模塊中。
  • MiniTemplator (Template Engine):針對HTML文件的一個緊湊型模板引擎。對於模板變量和塊定義它具備簡單的語法。其中塊能夠嵌套。
  • Layout Solution:簡化網站開發和維護。它擁有經常使用的變量和頁面元素使你不須要重複作頁面佈局工做。
  • Cached Fast Template:它已經歸入 FastTemplate ,容許你緩存模板文件,甚至能夠在分離的塊內容上緩存不一樣的規格。
  • TinyButStrong:一個支持MySQL,Odbc,Sql-Server和ADODB的模板引擎。它包含7個方法和兩個屬性。
  • Brian Lozier’s php based template engine:只有2K大小,很是快而且是面向對象設計
  • WACT:一個從設計中分離代碼的模板引擎
  • PHPTAL:一個PHP下面的XML/XHTML模板庫。
  • Rong_View_Wudimei:Wudimei開發的國產框架Rong Framework的模板引擎,它相似於smarty,優勢是速度快,缺點是模板標籤較少,不過夠用了。

框架介紹thinkphp

ThinkPHP是一個免費開源的,快速、簡單的面向對象的 輕量級PHP開發框架 ,創立於2006年初,遵循Apache2開源協議發佈,是爲了敏捷WEB應用開發和簡化企業應用開發而誕生的。ThinkPHP從誕生以來一直秉承簡潔實用的設計原則,在保持出色的性能和至簡的代碼的同時,也注重易用性。而且擁有衆多的原創功能和特性,在社區團隊的積極參與下,在易用性、擴展性和性能方面不斷優化和改進,已經成長爲國內最領先和最具影響力的WEB應用開發框架,衆多的典型案例確保能夠穩定用於商業以及門戶級的開發。

PHP認證級別

PHP課程由初級(IFE)、中級(IPE)和高級(IAE)三個部分。

  • IFE即Index Front-end Engineer的縮寫,指數前端工程師的意思。
  • IPE即 Index PHP Engineer 的縮寫,意思是指數PHP工程師。
  • IAE即 Index architecture/advanced engineer 的縮寫,意思是:指數高級/架構工程師。

PHP安全

PHP其實不過是Web服務器的一個模塊功能,因此首先要保證Web服務器的安全。固然Web服務器要安全又必須是先保證系統安全,這樣就扯遠了,無窮無盡。常見的web安全漏洞有:注入攻擊,跨站攻擊,服務器自身漏洞等,對應的詳細解釋,詳見:擴展閱讀中的《WEB安全性-2010_OWASP_TOP10》,這裏有很詳盡的解釋。

PHP的優勢學習過程和方法

PHP的語法相似於C,Perl,ASP或者JSP。對於那些對上述之一的語言較熟悉的人來講,PHP太簡單了。相反的,若是你對PHP瞭解較多,那麼你對於其餘幾種語言的學習都很簡單了。你只須要很短的時間內將PHP的核心語言特色所有掌握,你可能已經很是瞭解HTML,甚至你已經知道怎樣用編輯設計軟件或者手工來製做好看的WEB站點。因爲PHP代碼可以無障礙的添加進你的站點,在你設計和維護站點的同時,你能夠很輕鬆的加入PHP使得你的站點更加具備動態特性。

數據庫鏈接

PHP能夠編譯成具備與許多數據庫相鏈接的函數。PHP與MySQL是絕佳的組合,若是再加上Apache服務器,就是至關完美的了。你還能夠本身編寫外圍的函數取間接存取數據庫。經過這樣的途徑當你更換使用的數據庫時,能夠輕鬆的更改編碼以適應這樣的變化。PHPLIB就是最經常使用的能夠提供通常事務須要的一系列基庫。

可擴展性

就像前面說的那樣,PHP已經進入了一個高速發展的時期。對於一個非程序員來講爲PHP擴展附加功能可能會比較難,可是對於一個PHP程序員來講並不困難。

PHP可伸縮性

傳統上網頁的交互做用是經過CGI來實現的。CGI程序的伸縮性不很理想,由於它爲每個正在運行的CGI程序開一個獨立進程。解決方法就是將常常用來編寫CGI程序的語

記事本保存php文件注意事項

言的解釋器編譯進你的web服務器(好比mod_perl,JSP)。PHP就能夠以這種方式安裝,雖然不多有人願意這樣以CGI方式安裝它。內嵌的PHP能夠具備更高的可伸縮性。

PHP免費安裝

PHP源代碼包安裝版:這個版本適合已經有本身獨立的網站域名、網站空間的專業網站建設用戶。使用方法依然其爲簡單,只需三步:

第1、到官方網站:下載 PHP源代碼包安裝版最新版本,解壓下載文件,將其中的所有內容上傳到你的支持PHP的網站空間

第2、改更文件屬性,請將根目錄下以PHP爲後綴名的文件和」/include/domain.php」和 「/attachments」 和 「/data」文件夾以及文件夾下全部的文件屬性改爲「可讀」、「可寫」、「可執行」,一般是「755」。

第3、打開你的網站根目錄,系統會自動運行setup安裝程序,按提示點下一步操做便可。

友情提示:當你下載咱們的軟件並看到這份說明時,則說明你必定是對企業網站建設有必定的需求或者你是一個網站建設技術學習者。

文件格式

  1.對於只含有 php 代碼的文件,咱們將在文件結尾處忽略掉 "?>"。這是爲了防止多餘的空格或者其它字符影響到代碼。

例如:

$foo = 'foo';

  2.縮進應該可以反映出代碼的邏輯結果,儘可能使用四個空格,禁止使用製表符TAB,由於這樣可以保證有跨客戶端編程器軟件的靈活性。

例如:

1 if(1==$x){
2 $indented_code=1;
3 if(1==$new_line){
4 $more_indented_code=1;
5 }
6 }

  

  3.變量賦值建議保持相等間距和排列。

例如:

1 $variable='demo';
2 $var='demo2';

  4.每行代碼長度應控制在80個字符之內,最長不超過120個字符。由於 linux 讀入文件通常以80列爲單位,就是說若是一行代碼超過80個字符,那麼系統將爲此付出額外操做指令。這個雖然看起來是小問題,可是對於追求完美的程序員來講也是值得注意並遵照的規範。

  5.每行結尾不容許有多餘的空格。

Php文件記事本編輯亂碼問題

通常狀況下,記事本編輯器在對文件進行完編輯並保存之時,其默認編碼爲ANSI,中文。然則更多的時候,php在語言環境設置時語言多數爲utf-8,直接保存並用於apache等http-server解析後就會出現亂碼。

爲此,應該注意在用記事本編輯完後可將文件用「另存爲」的方式對文件進行保存,並將「文件類型」選擇「全部文件」,編碼與文件指定語言編碼一致便可。[4] 

算數運算符

PHP 的運算符包括算術運算符、賦值運算符、比較運算符和邏輯運算符。[5] 

算數運算符:

加,減,乘,除,取模(取餘)
  +、-、*、/、%

賦值運算符:(如下解釋在許多書中有所不一樣)

賦值,加賦值,減賦值、乘賦值、除賦值,連字賦值

=、+=、-=、*=、/=、.=

位運算符:

位與、位或、位亦或、位非、左移、右移

&、|、^、~、<<、>>

比較運算符:

等於、全等於、不等於、不全等於、大於、小於、大於等於、小於等於

==、===、!=(<>)、!==、>、<、>=、<=

邏輯運算符:

邏輯與、邏輯或、邏輯非、邏輯亦或

&&、||、!、xor

字符串運算符:

. 鏈接兩個字符串

相關文章
相關標籤/搜索