introduction,security,downloads,exceptions。variables。
PHP: Hypertext Preprocessor。
PHP版本VC6與VC9、Thread Safe與None-Thread Safe等的區(qū)別
PHP的大版本主要分三支:PHP4/PHP5/PHP6
其中,PHP4由于太古老、對QQ支持不力已基本被淘汰,請無視PHP4。
PHP6由于基本沒有生產(chǎn)線上的應用,還基本只是一款概念產(chǎn)品,很多功能已在PHP5.3.3上實現(xiàn),所以也不詳述,請無視PHP6。
PHP5的版本主要分四支:PHP5.2之前的版本、PHP5.2.X、PHP5.3和日前發(fā)布的PHP5.4。
PHP5.2之前的版本不值得考慮,因為某些功能缺陷或者BUG。PHP5.4還處于Beta試用的版本號,非穩(wěn)定版本,請無視PHP5.4。
主流PHP程序?qū)HP5.2.X的兼容性*,而每次版本號的升級帶來的都是安全性和穩(wěn)定性的改善,所以宜挑選*版本。目前PHP5.2系列*是PHP5.2.17。
而如果產(chǎn)品是自己開發(fā)自己使用,PHP5.3在某些方面更具優(yōu)勢,在穩(wěn)定性上更勝一籌,增加了很多PHP5.2所不具有的功能,比如內(nèi)置php-fpm、更完善的垃圾回收算法、命名空間的引入、sqlite3的支持等等,是部署項目值得考慮的版本,強烈推薦PHP5.3.3。
除了版本號的不同,同一版本號的PHP版本也有區(qū)別,并且在選擇PHP擴展的時候需要注意。
install版:可執(zhí)行的MSI格式安裝包。
ZIP版:解壓即可用。和install版無區(qū)別。建議選擇ZIP版。
DEBUG版:最終用戶無需關(guān)心。
如果你在apache1或者apache2下使用PHP,你應該選擇VC6的版本
如果你在IIS下使用PHP應該選擇VC9的版本,VC6的版本使用visual studio6編譯,VC9使用Visual Studio 2008編譯,并且改進了性能和穩(wěn)定性。VC9版本的PHP需要你安裝Microsoft 2008 C++ Runtime。不要在apache下使用VC9的版本。
TS指Thread Safety,即線程安全,一般在IIS以ISAPI方式加載的時候選擇這個版本。
NTS即None-Thread Safe,一般以fast cgi方式運行的時候選擇這個版本,具有更好的性能。
從2000年10月20日發(fā)布的*Windows版的PHP3.0.17開始的都是線程安全的版本,這是由于與Linux/Unix系統(tǒng)是采用多進程的工作方式不同的是Windows系統(tǒng)是采用多線程的工作方式。如果在IIS下以CGI方式運行PHP會非常慢,這是由于CGI模式是建立在多進程的基礎(chǔ)之上的,而非多線程。一般我們會把PHP配置成以ISAPI的方式來運行,ISAPI是多線程的方式,這樣就快多了。但存在一個問題,很多常用的PHP擴展是以Linux/Unix的多進程思想來開發(fā)的,這些擴展在ISAPI的方式運行時就會出錯搞垮IIS。因此在IIS下CGI模式才是 PHP運行的最安全方式,但CGI模式對于每個HTTP請求都需要重新加載和卸載整個PHP環(huán)境,其消耗是巨大的。
為了兼顧IIS下PHP的效率和安全,微軟給出了FastCGI的解決方案。FastCGI可以讓PHP的進程重復利用而不是每一個新的請求就重開一個進程。同時FastCGI也可以允許幾個進程同時執(zhí)行。這樣既解決了CGI進程模式消耗太大的問題,又利用上了CGI進程模式不存在線程安全問題的優(yōu)勢。
因此,如果是使用ISAPI的方式來運行PHP就必須用Thread Safe(線程安全)的版本;而用FastCGI模式運行PHP的話就沒有必要用線程安全檢查了,用None Thread Safe(NTS,非線程安全)的版本能夠更好的提高效率。
一個很簡單的辦法就是phpinfo();
Thread Safety disabled是NTS,enabled是TS
Configure Command看到VC98字樣的是VC6,Compiler標明 MSVC9 (Visual C++ 2008) 的是VC9
在WIN7下:IIS7+NTS+FastCGI+vc9 是*搭檔或者apache+fastcgi+nts+vc6。
在WINXP下:Apache+TS+Apache module +vc6最合適的搭檔。
PHP5在長時間的開發(fā)及多個預發(fā)布版本后,2004年7月13日,PHP5.0發(fā)布。該版本以Zend引擎Ⅱ為引擎,并且加入了新功能如PHP Data Objects(PDO)。PHP5.0版本強化更多的功能。首先,完全實現(xiàn)面向?qū)ο螅峁┟麨镻HP兼容模式的功能。其次是XML功能,PHP5.0版本支持可直觀地訪問XML數(shù)據(jù)、名為SimpleXML的XML處理用界面。同時還強化了XMLWeb服務支持,而且標準支持SOAP擴展模塊。數(shù)據(jù)庫方面,PHP新版本提供旨在訪問MySQL的新界面——MySQL。除此前的界面外,還可以使用面向?qū)ο蠼缑婧皖A處理語句(Prepared Statement)等MySQL的新功能.另外,PHP5.0上還捆綁有小容量RDBMS-SQLite.
*構(gòu)造函數(shù)和析構(gòu)函數(shù) * 對象的引用 * 對象的克隆 * 對象中的私有、公共及受保護模式 * 接口 (Interfaces)
* 抽象類 * __call * __set 和 __get * 靜態(tài)成員
構(gòu)造函數(shù)和析構(gòu)函數(shù)
在 PHP4 中,當函數(shù)與對象同名時,這個函數(shù)將成為該對象的構(gòu)造函數(shù),并且在 PHP4 中沒有析構(gòu)函數(shù)的概念。
在 PHP5 中,構(gòu)造函數(shù)被統(tǒng)一命名為 __construct,并且引入了析構(gòu)函數(shù)的概念,被統(tǒng)一命名為 __destruct。
在PHP4中,傳遞變量給一個函數(shù)或方法,實際是把這個變量做了一次復制,也就意味著你傳給函數(shù)或方法的是這個變量的一個副本,除非你使用了引用符號“&;” 來聲明是要做一個引用,而不是一個 Copy。在 PHP5中,對象總是以引用的形式存在的,對象中的賦值操作同樣也都是一個引用操作。
當一個對象始終以引用的形式來被調(diào)用時,如果我想得到該對象的一個副本,該怎么辦呢?PHP5 提供了一個新的功能,就是對象的克隆,語法為 __clone。
抽象類不能被實例化。
抽象類與其它類一樣,允許定義變量及方法。
抽象類同樣可以定義一個抽象的方法,抽象類的方法不會被執(zhí)行,不過將有可能會在其派生類中執(zhí)行。
__call
PHP5 的對象新增了一個專用方法 __call(),這個方法用來監(jiān)視一個對象中的其它方法。如果你試著調(diào)用一個對象中不存在的方法,__call 方法將會被自動調(diào)用。
__set 和 __get
這是一個很棒的方法,__set 和 __get 方法可以用來捕獲一個對象中不存在的變量和方法。
在 PHP5 中,你可以在對象的方法中指明其參數(shù)必須為另一個對象的實例。
靜態(tài)成員和靜態(tài)方法在面象對象編程的術(shù)語中被稱作 “類方法(class methods)” 和 “類變量(class variables)”。
“類方法” 在一個對象沒有實例化前允許被調(diào)用。同樣,“類變量” 在一個對象沒有實例化前可以被獨立操作控制(不需要用一個對象的方法來控制)。
異常處理是公認的處理程序錯誤的理想方法,在 Java及 C 中都有這個概念,我們欣喜的看到,在 PHP5 已經(jīng)加入了這方面的應用。你可以嘗試使用 “try” 和 “catch” 來控制程序的錯誤。當有錯誤發(fā)生的時候,代碼會把錯誤交給 “catch” 子句來處理,在 “catch” 子句中,你需要指明要把錯誤交給某個對象處理,這樣做可以使代碼結(jié)構(gòu)看起來更清晰,因為我們可以把所有的錯誤信息交給一個對象來處理。
自定義錯誤處理
你可以很方便的用自定義的處理錯誤的代碼來控制你的程序中的意外。你僅僅需要從異常類中派生出一個自己的錯誤控制類,在你自己的錯誤控制類中,你需要有一個構(gòu)造函數(shù)和一個 getMessage 方法。
命名空間
名稱空間對類的分組或函數(shù)分組很有用。它可以把一些相關(guān)的類或函數(shù)給組合到一起,方便以后調(diào)用。
注意你需要在何種情況下使用名稱空間,在實際運用中,你可能會需要聲明兩個或多個名稱一樣的對象來做不同的事情,那么你就可以把他們分別放到不同的名稱空間中去(但接口是要相同的)。
從PHP5.3開始支持ZendGuard加密方式,必須安裝Zend Guard Loader,老的zend optimizer將不被支持。
Linux安裝Zend Guard Loader支持的過程:
操作系統(tǒng)為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搭配。
1、下載*Linux操作系統(tǒng)系下的Zend Guard Loader。
2、上傳至Linux服務器并解壓縮,注意閱讀生成目錄下的README文件。全文如下(添加必要的注釋)。在/etc/php.d/目錄下創(chuàng)建文件zend.ini,內(nèi)容如下:
1 | zend_extension=/usr/lib64/php/modules/ZendGuardLoader.so |
注意路徑一定要寫上,剛開始沒寫路徑,老是加載不上ZendGuardLoader.so,也可以直接將上面的配置寫入/etc/php.ini文件中,效果一樣。
3、重啟httpd服務:service httpd restart。
4.輸出<?php phpinfo(); ?>
PHP 5.5 正式版發(fā)布 不再支持 Windows XP
同時 PHP 開發(fā)者也提醒用戶,PHP 5.5 也包含一些不向后兼容的內(nèi)容,包括:不再支持 Windows XP 和 2003 系統(tǒng);不區(qū)分大小寫的匹配函數(shù)、類;常數(shù)名稱跟 Locale 無關(guān),這對一些使用非 ASCII 代碼的常量名的開發(fā)者需要注意的。
函數(shù)完整參考手冊:
序號 | 分類 | 描述 |
---|---|---|
1 | Array 函數(shù) | |
2 | Calendar 函數(shù) | 日歷擴展包含了簡化不同日歷格式間的轉(zhuǎn)換的函數(shù)。 |
3 | Date/Time 函數(shù) | Date/Time 函數(shù)用于從 PHP 腳本運行的服務器上獲取日期和時間并進行格式化。 |
4 | Directory 函數(shù) | Directory 函數(shù)用于獲得關(guān)于目錄及其內(nèi)容的信息。 |
5 | Error/Logging 函數(shù) | Error/Logging 函數(shù)用于對錯誤進行處理和記錄。 |
6 | Filesystem 函數(shù) | Filesystem 函數(shù)用于訪問和操作文件系統(tǒng)。 |
7 | Filter 函數(shù) | PHP 過濾器用于對來自非安全來源的數(shù)據(jù)(比如用戶輸入)進行驗證和過濾。 |
8 | FTP 函數(shù) | FTP 函數(shù)通過文件傳輸協(xié)議 (FTP) 提供對文件服務器的客戶端訪問。 |
9 | HTTP 函數(shù) | HTTP 函數(shù)用于對由 Web 服務器發(fā)送到瀏覽器的信息進行操作。 |
10 | Libxml 函數(shù) | Libxml 函數(shù)和常量與 SimpleXML、XSLT 以及 DOM 函數(shù)一起使用。 |
11 | Mail 函數(shù) | mail() 函數(shù)用于從腳本中直接發(fā)送電子郵件。 |
12 | Math 函數(shù) | Math 函數(shù)能處理 integer 和 float 范圍內(nèi)的值。 |
13 | 雜項函數(shù) | 我們把不屬于其他類別的函數(shù)歸納到雜項函數(shù)類別。 |
14 | MySQLi 函數(shù) | MySQLi 函數(shù)用于訪問 MySQL 數(shù)據(jù)庫服務器。 |
15 | SimpleXML 函數(shù) | SimpleXML 擴展提供了一種獲取 XML 元素的名稱和文本的簡單方式。 |
16 | String 函數(shù) | |
17 | XML Parser 函數(shù) | XML Parser 函數(shù)允許您創(chuàng)建 XML 解析器,并為 XML 事件定義句柄。 |
18 | Zip File 函數(shù) | Zip File 函數(shù)允許您讀取壓縮文件。 |
PHP原始為Personal Home Page的縮寫,已經(jīng)正式更名為"PHP: Hypertext Preprocessor"。注意不是“Hypertext Preprocessor”的縮寫,這種將名稱放到定義中的寫法被稱作遞歸縮寫。PHP于1994年由Rasmus Lerdorf創(chuàng)建,剛剛開始是Rasmus Lerdorf為了要維護個人網(wǎng)頁而制作的一個簡單的用Perl語言編寫的程序。這些工具程序用來顯示Rasmus Lerdorf的個人履歷,以及統(tǒng)計網(wǎng)頁流量。后來又用C語言重新編寫,包括可以訪問數(shù)據(jù)庫。他將這些程序和一些表單直譯器整合起來,稱為PHP/FI。PHP/FI可以和數(shù)據(jù)庫連接,產(chǎn)生簡單的動態(tài)網(wǎng)頁程序。
在1995年以Personal Home Page Tools (PHP Tools)開始對外發(fā)表*版本,Lerdorf寫了一些介紹此程序的文檔。并且發(fā)布了PHP1.0!在這的版本中,提供了訪客留言本、訪客計數(shù)器等簡單的功能。以后越來越多的網(wǎng)站使用了PHP,并且強烈要求增加一些特性。比如循環(huán)語句和數(shù)組變量等等;在新的成員加入開發(fā)行列之后,Rasmus Lerdorf在1995年6月8日將PHP/FI公開發(fā)布,希望可以透過社群來加速程序開發(fā)與尋找錯誤。這個發(fā)布的版本命名為PHP 2,已經(jīng)有PHP的一些雛型,像是類似Perl的變量命名方式、表單處理功能、以及嵌入到HTML中執(zhí)行的能力。程序語法上也類似Perl,有較多的限制,不過更簡單、更有彈性。PHP/FI加入了對MySQL的支持,從此建立了PHP在動態(tài)網(wǎng)頁開發(fā)上的地位。到了1996年底,有15000個網(wǎng)站使用 PHP/FI。
在1997年,任職于Technion IIT公司的兩個以色列程序設(shè)計師:Zeev Suraski和Andi Gutmans,重寫了 PHP 的剖析器,成為PHP 3的基礎(chǔ)。而PHP也在這個時候改稱為PHP:Hypertext Preprocessor。經(jīng)過幾個月測試,開發(fā)團隊在1997年11月發(fā)布了PHP/FI 2。隨后就開始 PHP 3的開放測試,較后在1998年6月正式發(fā)布PHP 3。Zeev Suraski和Andi Gutmans在PHP 3發(fā)布后開始改寫PHP的核心,這個在1999年發(fā)布的剖析器稱為 Zend Engine,他們也在以色列的Ramat Gan成立了Zend Technologies來管理PHP的開發(fā)。
在2000年5月22日,以Zend Engine 1.0為基礎(chǔ)的PHP 4正式發(fā)布,2004年7月13日則發(fā)布了PHP 5,PHP 5則使用了第二代的Zend Engine。PHP包含了許多新特色,像是強化的面向?qū)ο蠊δ堋⒁隤DO(PHP Data Objects,一個存取數(shù)據(jù)庫的延伸函數(shù)庫)、以及許多效能上的增強。PHP 4已經(jīng)不會繼續(xù)更新,以鼓勵用戶轉(zhuǎn)移到PHP5。
2008年P(guān)HP 5成為了PHP*有在開發(fā)的PHP版本。將來的PHP 5.3將會加入Late static binding和一些其他的功能強化。PHP 6的開發(fā)也正在進行中,主要的改進有移除register_globals、magic quotes 和Safe mode的功能。
2013年6月20日,PHP開發(fā)團隊自豪地宣布推出PHP5.5.0。此版本包含了大量的新功能和bug修復。需要開發(fā)者特別注意的一點是不再支持Windows XP和2003系統(tǒng)。
2014年10月16日,PHP開發(fā)團隊宣布PHP5.6.2可用。四安全相關(guān)的錯誤是固定在這個版本,包括修復cve-2014-3668,cve-2014-3669和cve-2014-3670。所有的PHP5.6鼓勵用戶升級到這個版本。
PHP4.0整個腳本程序的核心大幅更動,讓程序的執(zhí)行速度,滿足更快的要求。在*化之后的效率,已較傳統(tǒng)CGI或者ASP等程序有更好的表現(xiàn)。而且還有更強的新功能、更豐富的函數(shù)庫。無論您接不接受,PHP都將在 WebCGI的領(lǐng)域上,掀起巔覆性的革命。對于一位專業(yè)的Web Master而言,它將也是必修課程之一。
PHP 4.0是更有效的,更可靠的動態(tài)Web頁開發(fā)工具,在大多數(shù)情況運行比PHP 3.0要快,其腳本描述更強大并且更復雜,最顯著的特征是速率比的增加。PHP4.0這些優(yōu)異的性能是PHP腳本引擎重新設(shè)計產(chǎn)生的結(jié)果:引擎由AndiGutmans和Zeev Suraski從底層全面重寫。PHP4.0 腳本引擎——Zend引擎,使用了一種更有效的編譯——執(zhí)行方式,而不是PHP 3.0 采用的執(zhí)行 ——當解析時模型。
PHP4在3.0版的基礎(chǔ)上增加或增強了許多有用的特征,主要如下:
(1)別名:在PHP4中,可以利用引用為變量賦值,這給編程帶來了很大的靈活性。
(2)擴充了API模塊:PHP 4.0 為擴展的 API 模塊的提供了擴展PHP接口模塊,它比舊的 API 版本顯著地快。PHP 模塊已有的及最常用的接口多數(shù)被轉(zhuǎn)換到使用這個擴展的接口。
(3)自動資源釋放:PHP4增加了引用計數(shù)功能,這種新技術(shù)的引入使PHP4具有了自動內(nèi)存管理功能,減輕了開發(fā)人員的負擔。
(4)布爾類型:PHP 4.0 支持布爾類型。
(5)進程生成:在 UNIX 環(huán)境下的 PHP 4.0 提供了一個很智能和通用的生成進程,使用了一種名為基于automake/libtool的系統(tǒng)生成技術(shù)。
(6)COM/DCOM 支持:PHP 4.0 提供 COM/DCOM 支持 ( 僅用于Windows 環(huán)境 ) 可以無縫地存取和訪問 COM 對象。
(7)與PHP 3.0 兼容性很好:PHP 4.0 是與 PHP 3.0 代碼向后兼容性接近100%。由于 PHP 4 的改進的體系結(jié)構(gòu),兩者有一些細微的差別,但是大多數(shù)人將可能永遠不可能遇上這種情況。
(8)配置:PHP4重新設(shè)計和增強了PHP.ini文件,這使得用PHP.ini來配置PHP顯得極為容易,這個文件可以在運行時被Apache(unix系統(tǒng))或由Windows 注冊(Windows 環(huán)境)。
(9)加密支持:PHP4實現(xiàn)了完整的加密,這些加密功能是一個完整的mycrypt庫,并且 PHP 4.0 支持哈希函數(shù)。Blowfish,TripleDES,MD5,并且SHA1 也是可使用的一些加密算法。
(10)類型檢查:PHP 4.0 支持同一操作符用于評類型檢查:===(3 等號運算符,恒等計算符),為在兩個值和其類型之間作檢查。例如, 3 ===3 將視為假 ( 類型是不同的),而 3 ==3 ( 相等判斷,不比較類型 ) 將視為真。
(11)FTP 支持:PHP 4.0 支持 FTP。通常,你會為通過一個調(diào)制解調(diào)器連接下載一個大文件提供一個接口。然而,如果你確實有需要,可以使用PHP。
(12)PHP4新增函數(shù)或功能增強函數(shù):PHP 4.0 新增了許多函數(shù),同時也將許多現(xiàn)有的函數(shù)功能進行了增強,以下是一些例子。array_count_values() eval() foreach() include() ob_end_clean() ob_end_flush() ob_get_contents() ob_start()strip_tags() unset()。
(13)here打印:PHP 4.0 的Here打印是與Perl類似的,盡管完全不相同。Here是打印大容量文章的一個有用的方法,例如在HTML文件中,不會漏掉任何一個字符,例如目錄標記。
(14)HTTP Session fallback 系統(tǒng):為 HTTP Session管理的一個 fallback 系統(tǒng)在 PHP 4.0被實現(xiàn)。缺省情況下,Session標識符由cookies存儲。如果沒有cookies支持或一項cookies任務失敗,Session標識符自動被創(chuàng)建并在 URL 的查詢字符串中被攜帶。
(15)ISAPI 支持:PHP 4.0 能作為一個個性化的 ISAPI 模塊作為IIS插件。這比 PHP 3.0 更有效,它作為一個外部的程序來運行。
(16)內(nèi)存:PHP 4.0 能更有效的使用內(nèi)存,導致較少的內(nèi)存占用消耗,這主要歸功于引用計數(shù)技術(shù)的實現(xiàn)。⒄其他類成員函數(shù):在 PHP 4.0 你能在成員函數(shù)本身的作用域或全局范圍內(nèi)調(diào)用其他類的成員函數(shù)。例如,你能用一個子函數(shù)覆蓋父函數(shù),并在子函數(shù)中調(diào)用父函數(shù)。
(17)多維數(shù)組:在 PHP 4.0 ,利用GET,POST,Cookies的進行的數(shù)據(jù)傳輸支持多維數(shù)組。
(18)個性化的 HTTPSession支持:HTTP Session處理,包括 fallback系統(tǒng)管理,在 PHP 4.0被它的新庫函數(shù)實現(xiàn)。在版本 3.0 中處理Session要求使用 PHPLIB 和第三方的庫函數(shù),它比把Session直接地由 PHP 支持慢了許多。
(19)個性化的 Java 支持:PHP 4.0 支持和java的交互。這種個性化的Java 支持為PHP 在 Java 對象上創(chuàng)建和使用方法提供一個簡單并且有效的工具。
(20)對象和數(shù)嵌套組:PHP 4.0 實現(xiàn)了功能更加強大的對象,移去了 PHP 3.0存在的種種句法限制。對象能在數(shù)組以內(nèi)被嵌套并且反過來也如此,可以根據(jù)你的需要實現(xiàn)嵌套。
(21)面向?qū)ο蟮木幊蹋篜HP 4.0 為面向?qū)ο蟮木幊毯蜆?gòu)造類及對象提供擴展的功能和新特征。PHP4實現(xiàn)了對象重載,引用技術(shù)等新技術(shù)。
(22)對象重載支持:對象重載語法允許第三方的基于面向?qū)ο蟮念悗焓褂?nbsp;PHP4 的面向?qū)ο蟮奶卣鞔嫒∷麄冏陨淼墓δ堋J褂眠@個特征的一個 COM 模塊已經(jīng)被實現(xiàn)了。
(23)輸出緩沖支持:PHP 提供了一個輸出緩沖函數(shù)集合。輸出緩沖支持允許你寫包裹函數(shù)功能壓縮緩沖區(qū)。在 PHP4 的輸出緩沖支持允許 HTML 頭信息存放,無論 HTML的正文是否輸出。頭信息( (header(),content type,and cookies ) 不采用緩沖。
(24)增加了PCRE庫:PHP 4.0 包括一個 Perl 兼容的正則表達式(PCRE ) 庫,和正常regex庫一起與 PHP 綁定。split 和replace PCRE 功能被支持。PCRE 和 Perl 正規(guī)表達式之間有一些細微差別。
(25)PHP.ini 文件:PHP.ini文件在 PHP4.0 被重新設(shè)計,使用的 PHP 的配置PHP.ini是更容易并且更有效的。全部文件能被Apache 在運行時間操作 ( 在 Apache環(huán)境 下 ) 或由 Windows 注冊表 ( 在 Windows 下面 )。被加入PHP.ini文件的配置指令自動地在所有相關(guān)的模塊中被支持。
(26)引用計數(shù):PHP 4.0 為系統(tǒng)中的每個數(shù)值提供了引用計數(shù),包括資源。一旦一個資源不再被任何變量引用,它自動地被釋放以節(jié)省內(nèi)存資源。利用這個特征的最明顯的例子一個內(nèi)置SQL查詢的循環(huán)語句。在PHP 3.0中 ,每次遞歸另外的 SQL 結(jié)果集合重復申請內(nèi)存,直到腳本執(zhí)行完畢,這些結(jié)果集合占用的內(nèi)存才被釋放。
(27)支持引用:通過引用可以改變一個變量的值。
(28)函數(shù)的運行時綁定:PHP 4.0 的運行時間綁定功能允許你在他們被聲明以前調(diào)用,無論聲明是否在代碼以后或是在運行時間。
(29)類的運行時信息:PHP 4.0 支持在運行時刻存取下列類信息:一個對象的類名,一個對象的父類的類名字,以及對象函數(shù)所在的名字。
(30)服務器抽象層:為支持Web服務器提供了增強型 SAPI ( 服務器 API ) 接口,是 PHP 4.0 不可分的一部分。這個服務器抽象層,提供了通用的WEB服務器接口支持,支持多線程WEB服務器,為大多數(shù)的WEB服務器提供透明的支持,這些服務器包括 Apache,IIS ( ISAPI ),以及 AOL 服務器。
(31)語法的點亮顯示:PHP 4.0 語法的點亮顯示允許開發(fā)者看見源代碼而不是腳本,這個功能比PHP 3.0中的更有效。它跑得更快,更執(zhí)行得更好,并且產(chǎn)生更緊湊的HTML代碼。
(32)由引用改變變量的值:PHP 4.0 由引用支持可變的賦值,“關(guān)聯(lián)”的2個變量之中個的任何一個的值被改變,另外的變量的值同樣被改變,這類似與C中的指針類型。
(33)在引用字符串中的變量引用:PHP 4.0 增強了在引用字符串中的變量引用。
PHP3跟Apache服務器的緊密結(jié)合的特性;加上它可以不斷的更新及加入新的功能,而且?guī)缀踔С炙兄髁髋c非主流數(shù)據(jù)庫。再以它能高速的執(zhí)行效率,使得PHP在1999年中的使用站點已經(jīng)超過了150000。加上它的源代碼完全公開,在 Open Source意識抬頭的今天,它更是這方面的中流砥柱。不斷地有新的函數(shù)庫加入,以及不停地更新的活力。使得PHP無論在UNIX、LINUX或是Windows的平臺上都可以有更多新的功能。它提供豐富的函數(shù),使得在程序設(shè)計方面有著更好的支持。
php支持八種原始類型。
四種標量類型:
?boolean(布爾型)
?integer(整型)
?float(浮點型,也作“double”)
?string(字符串)
兩種復合類型:
array(數(shù)組)、object(對象)
較后是兩種特殊類型:
resource(資源)、NULL
為了確保代碼的易讀性,本手冊還介紹了一些偽類型:
?mixed
?number
?callback
可能還會讀到一些關(guān)于“雙精度(double)”類型的參考。實際上double和float是相同的,由于一些歷史的原因,這兩個名稱同時存在。
變量的類型通常不是由程序員設(shè)定的,確切地說,是由php根據(jù)該變量使用的上下文在運行時決定的。
注:如果想查看某個表達式的值和類型,用var_dump()。
注:如果只是想得到一個易讀懂的類型的表達方式用于調(diào)試,用gettype()。要查看某個類型,不要用gettype(),而用is_type函數(shù)。
1、支持Unicode。Unicode是有其必然,雖然Unicode占用較多的空間,但Unicode帶來的便利性,遠超過占用空間的缺點,尤其在國際化的今天,硬件設(shè)備越來越強大,網(wǎng)速也大幅度的提升,這么一點小小的缺點是可以忽略的。另外一點,PHP也可以在.ini文件中設(shè)定能不能開啟支持Unicode,決定權(quán)在你自己,這是一個不錯的點子,關(guān)掉Unicode的支持,PHP的性能并不會有大幅度的提升,主要的影響在于需要引用字符串的函數(shù)。
2、Register Globals 將被移除這是一個主要的決定,老的PHP使用者會覺得Register Globals滿方便的,但是卻忽略了Register Globals會帶來程序上安全性的隱患,大多數(shù)的主機上此項功能是關(guān)閉的,印象中從PHP4.3.x版開始,此項默認配置值即是關(guān)閉狀態(tài),PHP6正式移除Register Globals也代表著如果程序是PHP3時代的產(chǎn)物,將完全不能運用,除了改寫用途外,別無他法。
3、Magic Quotes 將取消Magic Quotes主要是自動轉(zhuǎn)義須要轉(zhuǎn)義的字符,此項功能移除也符合大多數(shù)PHP開發(fā)者的心聲。
4、Safe Mode 取消。老實說,這個模式不知道哪里不好,取消就取消吧,反正也用不到。
5、‘var’別名為‘public’,在類中的var聲明變成public的別名,相信是為了兼容PHP5而作的決定,PHP6現(xiàn)在也可以稱作為OO語言了。
6、通過引用返回將出錯未來通過引用返回編譯器將會報錯 例如$a =& new b()、function &c(),OO語言默認就是引用,所以不須要再運用&了。
7、zend.ze1 compatbility mode 將被移去(Zend.ze1相容模式將被移去),PHP5是為兼容舊有PHP4,所以在.ini中可選擇是否開啟相容模式,原由在于PHP5運用的是第二代分析引擎,但是相容模式并不是百分之百能分析 PHP4語法,所以舊時代的產(chǎn)物,移除。
8、Freetype 1andGD 1 support將不見這兩個Libs存在了很久,php6將不再支持,況且GD1早已被現(xiàn)在的GD2取代了。
9、dl() 被移到SAPI中dl()主要是讓設(shè)計師加載extension Libs,被移到SAPI中。
10、Register Long Array去除 從PHP5起默認是關(guān)閉,在PHP6中正式移除。
11、一些Extension的變更例如XMLReader和XMLWriter將不再是以Extension的方式出現(xiàn),他們將被移入到PHP的核心之中,并且默認是開啟,eregextension將被放入PECL,代表著它將被移出PHP核心,這也是為了讓路給新的正則表達式extension,此外,F(xiàn)ileinfo extension也將被導入PHP的核心之中。
12、APC將被導入核心這是一個提高PHP性能的功能,它將被放入PHP核心中,并且可以選擇是否啟用APC。
13、告別ASP風格的起始標簽原來是為了取悅ASP開發(fā)者轉(zhuǎn)向運用PHP,現(xiàn)今已經(jīng)不再須要這種做法了。
較后,別期望PHP6的性能可以徹底超過PHP5,有可能PHP6的執(zhí)行效率會比PHP5還要來得慢,但是可以預期的是,PHP開發(fā)小組將會努力的完善PHP6,超越PHP5。
軟件需求(*版)
WindowsVista或更高版本;
Apache2+或IIS6+或Nginx
安裝過程將PHP4.0.5解壓到C:\Web\php\目錄下。
將MySQL3.23.38安裝到C:\Web\mysql\目錄下。
將C:\web\php\php4ts.dll文件拷貝到C:\WINNT\system32\目錄下。
將C:\web\php\php.exel文件拷貝到C:\WINNT\目錄下。
將C:\web\php\php.ini-dist文件拷貝到C:\WINNT\目錄下,并將php.ini-dist更名為php.ini。
運行C:\Web\apache\Apache\Apache.exe-i-n
運行C:\Web\mysql\bin\mysqld-nt.exe--install
編輯C:\WINNT\php.ini
找到“extension_dir=./”字段,將其改為extension_dir="C:\myphp\php\extensions"。
編輯C:\Web\apache\Apache\conf\httpd.conf
找到“#BindAddress*”字段,將其改為BindAddress127.0.0.1。(如果主機有固定IP地址,此處改為主機IP地址。如BindAddress211.101.152.106),找到“ServerName”字段,將其改為ServerNamelocalhost。(如主機有固定主機名,此處改為主機的主機名。如ServerNamebn001)。
找到“ScriptAlias/cgi-bin/"C:/Web/apache/Apache/cgi-bin/"”字段,在其下面加入ScriptAlias/php/"C:/Web/php/"。找到“#AndforPHP4.x,use:”字段,在其后面加入:AddTypeapplication/x-httpd-php;ActionApplication/x-httpd-php"c:/Web/php/php.exe"。
找到“#LoadModuleusertrack_modulemodules/mod_usertrackso”字段,LoadModulephp4_modulec:/web/php/sapi/php4apache.dll
UNIX下所需軟件
php-3.0.14-win32.zip;php-3.0.14-win32.zip;mysql-shareware-3.22.32-win.zip
所有軟件均安裝在/export/home/guoj/下,也可在其他目錄。
安裝mysql
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | gzip-dcmysql-3.22.30.tar.gz|tarxvf- cdmysql-3.22.30 ./configure-prefix=/export/home/guoj/mysql make makeinstall scripts/mysql_install_db cd../mysql/bin bin/safe_mysqld&安裝phpapache gzip-dcapache_1.3.11.tar.gz|tarxvf- gzip-dcphp-3.0.11.tar.gz|tarxvf- cdapache_1.3.11 ./configure-prefix=/export/home/guoj/www cd../php-3.0.11 ./configure-with-apache=/export/home/guoj/apache_1.3.11 -with-mysql=/export/home/guoj/mysql-enable-track-vars make makeinstall cd../apache_1.3.11 ./configure--prefix=/export/home/guoj/www --activate-module=src/modules/php3/libphp3.aP make makeinstall cd../php-3.0.11 cd../php3.ini-distphp3.ini viphp3.ini修改php3.ini doc_root=/export/home/guoj/www/htdocs/ extension_dir=/export/home/guoj/php-3.0.11/ extension=php3_mysql.dllcpphp3.ini/usr/local/lib/php3.inivi../www/conf/httpd.conf |
加上以下幾句:
1 2 3 4 | <Directory"/export/home/guoj/php-3.0.11/"> OptionsFollowSymLinks AllowOverrideNone </Directory>../www/bin/apachectlstart |
PHP 在數(shù)據(jù)庫方面的豐富支持,也是它迅速走紅的原因之一,它支持下列的數(shù)據(jù)庫或是數(shù)據(jù)文件:
Adabas 、D、 DBA、dBase 、dbm 、filePro 、Informix 、InterBase、mSQL 、Microsoft SQL Server、·MySQL、Solid、Sybase、 Oracle 、PostgreSQL
而在 Internet 上它也支持了相當多的通訊協(xié)議 (protocol),包括了與電子郵件相關(guān)的 IMAP,POP3;網(wǎng)管系統(tǒng) SNMP;網(wǎng)絡(luò)新聞NNTP;帳號共用 NIS;全球信息網(wǎng) HTTP 及 Apache 服務器;目錄協(xié)議 LDAP 以及其它網(wǎng)絡(luò)的相關(guān)函數(shù)。
除此之外,用 PHP 寫出來的 Web 后端 CGI 程序,可以很輕易的移植到不同的操作系統(tǒng)上。例如,先以 Linux 架的網(wǎng)站,在系統(tǒng)負荷過高時,可以快速地將整個系統(tǒng)移到 SUN 工作站上,不用重新編譯 CGI 程序。面對快速發(fā)展的 Internet,這是長期規(guī)劃的*選擇。
相關(guān)語法及概念語法(例子中均忽略了PHP代碼邊界符 ):
注釋的語法有三種:
基本的結(jié)構(gòu)控制語句:
一個PHP實例:
php對面向?qū)ο蟮闹С?/p>
面向?qū)ο缶幊痰母拍睿?/p>
不同的作者之間說法可能不一樣,但是一個OOP語言必須有以下幾方面:
1.抽象數(shù)據(jù)類型和信息封裝
2.繼承
3.多態(tài)
在PHP中是通過類來完成封裝的:
當然你可以按自己的喜好進行定義,但*保持一種標準,這樣會更有效。數(shù)據(jù)成員在類中使用"var"聲明來定義,在給數(shù)據(jù)成員賦值之前,它們是沒有類型的。一個數(shù)據(jù)成員可以是一個整數(shù),一個數(shù)組,一個相關(guān)數(shù)組(associative array)或者是一個對象。方法在類中被定義成函數(shù)形式,在方法中訪問類成員變量時,你應該使用$this->name,否則對一個方法來說,它只能是局部變量。
使用new操作符來創(chuàng)建一個對象:
然后你可以使用成員函數(shù)通過:
在這個例子中,setX成員函數(shù)將5賦值給對象的成員變量x(不是類的),然后getX返回它的值5。可以象:$obj->x=6那樣通過類引用方式來存取數(shù)據(jù)成員,這不是一個很好的OOP習慣。我強烈建議通過方法來存取成員變量。如果你把成員變量看成是不可處理的,并且只通過對象句柄來使用方法,你將是一個好的OOP程序員。不幸的是,PHP不支持聲明私有成員變量,所以不良代碼在PHP中也是允許的。繼承在PHP中很容易實現(xiàn),只要使用extends關(guān)鍵字。
"Another"類的對象擁有了父類(Something)的全部的數(shù)據(jù)成員及方法,而且還加上了自己的數(shù)據(jù)成員和方法。
你可以使用
PHP只支持單繼承,所以你不能從兩個或兩個以上類派生出新的類來。你可以在派生類中重定義一個方法,如果我們在"Another"類中重定義了getX方法(方法重寫),我們就不能使 用"Something"中的getX方法了。如果你在派生類中聲明了一個與基派同名的數(shù)據(jù)成員,那么當你處理它時, 它將“隱藏”基類的數(shù)據(jù)成員。
你可以在你的類中定義構(gòu)造函數(shù)。構(gòu)造函數(shù)是一個與類名同名的方法,當你創(chuàng)建一個類的對象時會被調(diào)用,例如:
所以你可以創(chuàng)建一個對象,通過:
構(gòu)造函數(shù)會自動地把6賦值給數(shù)據(jù)變量x。構(gòu)造函數(shù)和方法都是普通的PHP函數(shù)(”__“兩個下劃線,魔術(shù)方法),所以你可以使用缺省參數(shù)。
接著:
缺省參數(shù)使用C++的方式,所以你不能忽略Y的值,而給X一個缺省參數(shù),參數(shù)是從左到右賦值的,如果傳入的參數(shù)少于要求的參數(shù)時,其作的將使用缺省參數(shù)。
當一個派生類的對象被創(chuàng)建時,只有它的構(gòu)造函數(shù)被調(diào)用,父類的構(gòu)造函數(shù)沒被調(diào)用,如果你想調(diào)用基類的構(gòu)造函數(shù),你必須要在派生類的構(gòu)造函數(shù)中用parent::__construct()調(diào)用。可以這樣做是在派生類中所有父類的方法都是可用的。
OOP的一個很好的機制是使用抽象類。抽象類是不能實例化,只能提供給派生類一個接口。設(shè)計者通常使用抽象類來強迫程序員從基類派生,這樣可以確保新的類包含一些期待的功能。在PHP中沒有標準的方法,但是:如果你需要這個特性,可以通過定義基類,并在它的構(gòu)造函數(shù)后加上"die" 的調(diào)用,這樣就可以保證基類是不可實例化的,在每一個方法(接口)后面加上"die" 語句,所以,如果一個程序員在派生類中沒有復蓋方法,將引發(fā)一個錯誤。而且因為PHP 是無類型的,你可能需要確認一個對象是來自于你的基類的派生類,那么在基類中增加一個方法來實義類的身份(返回某種標識id),并且在你接收到一個對象參數(shù)時校驗這個值。當然,如果一個不好的邪惡程序員在派生類中復蓋了這個方法,這種方法就不起作用了,不過一般問題多在懶惰的程序員身上,而不是邪惡的程序員。
當然,能夠讓基類對程序員無法看到是很好的,只要將接口打印出來做他們的工作就可以了。PHP 5 引入了析構(gòu)函數(shù)的概念,這類似于其它面向?qū)ο蟮恼Z言,如 C++。析構(gòu)函數(shù)會在到某個對象的所有引用都被刪除或者當對象被顯式銷毀時執(zhí)行。
重載(與復蓋不同)在PHP中不支持,因為PHP是弱類型語言。在OOP中,你可以重載一個方法來實現(xiàn)兩個或重多的方法具有相同的名字,但是有不同數(shù)量或類型的參數(shù)(這要看語言)。PHP 是一種松散類型的語言,所以通過類型重載不起作用,然而通過參數(shù)的個數(shù)不同來重載也不起作用。
有時在OOP中重載構(gòu)造函數(shù)非常好,這樣你可以通過不同的方法創(chuàng)建對象(變量函數(shù))。在PHP中實現(xiàn)它的技巧是:
通過在類中的額外的處理,使用這個類對用戶是透明的:
有時這個非常好用。
多態(tài)多態(tài)是對象的一種能力,它可以在運行時刻根據(jù)傳遞的對象參數(shù),決定調(diào)用哪一個對象的方法。例如,如果你有一個figure的類,它定義了一個draw的方法。并且派生了circle和rectangle 類,在派生類中你復蓋了draw方法,你可能還有一個函數(shù),它希望使用一個參數(shù)x,并且可以調(diào)用$x->draw()。如果你有多態(tài)性,調(diào)用哪個draw方法就依賴于你傳遞給這個函數(shù)的對象類型。
多態(tài)性在象PHP這樣的解釋語言(想象一下一個C++編譯器生成這樣的代碼,你應該調(diào)用哪一個方法?你也不知道你擁有的對象是什么類型的,好,這不是重點)是非常容易和自然的。所以PHP當然支持多態(tài)性。
用PHP進行面向?qū)ο缶幊?/strong>一些"純化論者(purists)"可能會說PHP不是一個真正的面向?qū)ο蟮恼Z言,這是事實。PHP 是一個混合型語言,你可以使用OOP,也可以使用傳統(tǒng)的過程化編程。然而,對于大型項目,你可能想/需要在PHP 中使用純的OOP去聲明類,而且在你的項目只用對象和類。
隨著項目越來越大,使用OOP可能會有幫助,OOP代碼很容易維護,容易理解和重用。這些就是軟件工程的基礎(chǔ)。在基于web的項目中應用這些概念就成為將來網(wǎng)站成功的關(guān)鍵。
高級OOP技術(shù)在看過基本的OOP概念后,我就可以向你展示更高級的技術(shù):
序列化(Serializing)
PHP不支持永久對象,在OOP中永久對象是可以在多個應用的引用中保持狀態(tài)和功能的對象,這意味著擁有將對象保存到一個文件或數(shù)據(jù)庫中的能力,而且可以在以后裝入對象。這就是所謂的序列化機制。PHP 擁有序列化方法,它可以通過對象進行調(diào)用,序列化方法可以返回對象的字符串表示。然而,序列化只保存了對象的成員數(shù)據(jù)而不包括方法。
在PHP4中,如果你將對象序列化到字符串$s中,然后釋放對象,接著反序列化對象到$obj,你可以繼續(xù)使用對象的方法!我不建議這樣去做,因為(a)文檔中沒有保證這種行為在以后的版本中仍然可以使用。(b) 這個可能導致一種誤解,在你把一個序列化后的版本保存到磁盤并退出腳本時。當以后運行這個腳本時,你不能期待著在反序列化一個對象時,對象的方法也會在那里,因為字符串表示根本就不包括方法。
總而言之,PHP 進行序列化對于保存對象的成員變量非常有用。(你也可以將相關(guān)數(shù)組和數(shù)組序列化到一個文件中)。
例子 :
你恢復了成員數(shù)據(jù),但是不包括方法(根據(jù)文檔所說)。這導致了只能通過類似于使用$obj2->x來存取成員變量(你沒有別的方法!)的*辦法,所以不要在家里試它。
有一些辦法可以解決這個問題,我把它留著,因為對這篇簡潔的文章來說,他們太不好。我會很高興地歡迎在PHP的后續(xù)版本中有全序列化的特性。
使用類進行數(shù)據(jù)存儲PHP和OOP一件非常好的事情就是,你可以很容易地定義一個類來操作某件事情,并且無論何時你想用的時候都可以調(diào)用相應的類。假設(shè)你有一個HTML表單,用戶可以通過選擇產(chǎn)品ID號來選擇一個產(chǎn)品。在數(shù)據(jù)庫中有產(chǎn)品的信息,你想把產(chǎn)品顯示出來,顯示它的價格等等。你擁有不同類型的產(chǎn)品,并且同一個動作可能對不同的產(chǎn)品具有不同的意思。例如,顯示一個聲音可能意味著播放它,但是對于其它種類的產(chǎn)品可能意味著顯示一個存在數(shù)據(jù)庫中的圖片。你可以使用OOP或PHP來減少編碼并提高質(zhì)量:
定義一個產(chǎn)品的類,定義它應該有的方法(例如:顯示),然后定義對每一種類型的產(chǎn)品的類,從產(chǎn)品類派后出來(SoundItem類,ViewableItem類,等等),復蓋在產(chǎn)品類中的方法,使它們按你的想法動作。
根據(jù)數(shù)據(jù)庫中每一種產(chǎn)品的類型(type)字段給類命名,一個典型的產(chǎn)品表可能有(id,type,price,description,等等字段)...然后在處理腳本中,你可以從數(shù)據(jù)庫中取出type值,然后實例化一個名為type的對象:
這是PHP的一個非常好的特性,你可以不用考慮對象的類型,調(diào)用$obj的顯示方法或其它的方法。使用這個技術(shù),你不需要修改腳本去增加一個新類型的對象,只是增加一個處理它的類。
這個功能很強大,只要定義方法,而不去考慮所有對象的類型,在不同的類中按不同的方法實現(xiàn)它們,然后在主腳本中對任意對象使用它們,沒有if...else,也不需要兩個程序員,只有高興。
你同意編程是容易的,維護是便宜的,可重用是真的嗎?
如果你管理一組程序員,分配工作就是很簡單的了,每個人可能負責一個類型的對象和處理它的類。
可以通過這個技術(shù)實現(xiàn)國際化,根據(jù)用戶所選的語言字段應用相應的類就可以了,等等。
拷貝和克隆當你創(chuàng)建一個$obj的對象時,你可以通過$obj2=$obj來拷貝對象,新的對象是$obj的一個拷貝(不是一個引用),所以它具有$obj在當時的狀態(tài)。有時候,你不想這樣,你只是想生成一個象obj類一樣的一個新的對象,可以通過使用new語句來調(diào)用類的構(gòu)造函數(shù)。在PHP中也可以通過序列化,和一個基類來實現(xiàn),但所有的其它類都要從基類派生出來。
進入危險區(qū)域
當你序列化一個對象,你會得到某種格式的字符串,如果你感興趣,你可以調(diào)究它,其中,字符串中有類的名字(太好了!),你可以把它取出來,象:
所以假設(shè)你創(chuàng)建了一個"Universe"的類,并且強制所有的類都必須從universe擴展,你可以在universe 中定義一個clone的方法,如下:
你所得到的是一個新的Something類的對象,它同使用new方法,調(diào)用構(gòu)造函數(shù)創(chuàng)建出的對象一樣。我不知道這個對你是否有用,但是Universe類可以知道派生類的名字是一個好的經(jīng)驗。想象是*限制。
模板引擎
Smarty:Smarty的特點是將模板編譯成PHP腳本,然后執(zhí)行這些腳本。很快,非常方便。
Heyes Template Class:一個非常容易使用,但功能強大并且快速的模板引擎,它幫助你把頁面布局和設(shè)計從代碼中分離。
FastTemplate:一個簡單的變量插值模板類,它分析你的模板,把變量的值從HTML代碼中分離處理。
ShellPage:一個簡單易用的類,可以讓你的整個網(wǎng)站布局基于模板文件,修改模板就能改變整個站點。
STP Simple Template Parser:一個簡單、輕量級并且易于使用的模板分析類。它可以從多個模板中組裝一個頁面,把結(jié)果頁面輸出到瀏覽器或者文件系統(tǒng)。
OO Template Class:一個你可以用在自己程序中的面向?qū)ο蟮哪0孱悺?/p>
SimpleTemplate:一個可以創(chuàng)建和結(jié)構(gòu)化網(wǎng)站的模板引擎。它可以解析和編譯模板。
bTemplate:短小但是快速的模板類,允許你把PHP邏輯代碼從HTML修飾代碼中分離。
Savant:一個強大且輕量級的PEAR兼容模板系統(tǒng)。它是非編譯型的,使用PHP語言本身做為它的模板語言。
ETS - easy template system:可以使用完全相同數(shù)據(jù)重組模板的模板系統(tǒng)。
EasyTemplatePHP:適用于你的站點的一個簡單但是強大的模板系統(tǒng)。
vlibTemplate:一個快速、全能的模板系統(tǒng),它包含一個緩存和調(diào)試類。
AvanTemplate:多字節(jié)安全的模板引擎,占用很少系統(tǒng)資源。它支持變量替換,內(nèi)容塊可以設(shè)置顯示或隱藏
Grafx Software’s Fast Template:一個修改版本的Fast Template系統(tǒng),它包括緩存功能,調(diào)試控制臺以及沉默去除為賦值塊。
TemplatePower:一個快速、簡單、功能強大的模板類。主要功能有嵌套的動態(tài)塊支持,塊/文件包含支持以及顯示/隱藏未賦值的變量。
TagTemplate:這個庫的功能被設(shè)計來使用模板文件,同時允許你從HTML文件檢索信息。
htmltmpl: templating engine:一個適用于Python和PHP的模板引擎。它面向希望在項目中分離代碼和設(shè)計的web應用開發(fā)人員。
PHP Class for Parsing Dreamweaver templates:一個分析Dreamweaver模板的簡單類,被用于Gallery 2 和WordPress的自定義模塊中。
MiniTemplator (Template Engine):針對HTML文件的一個緊湊型模板引擎。對于模板變量和塊定義它具有簡單的語法。其中塊可以嵌套。
Layout Solution:簡化網(wǎng)站開發(fā)和維護。它擁有常用的變量和頁面元素使你不需要重復做頁面布局工作。
Cached Fast Template:它已經(jīng)納入 FastTemplate ,允許你緩存模板文件,甚至可以在分離的塊內(nèi)容上緩存不同的規(guī)格。
TinyButStrong:一個支持MySQL,Odbc,Sql-Server和ADODB的模板引擎。它包含7個方法和兩個屬性。
Brian Lozier’s php based template engine:只有2K大小,非常快并且是面向?qū)ο笤O(shè)計。
WACT:一個從設(shè)計中分離代碼的模板引擎。
PHPTAL:一個PHP下面的XML/XHTML模板庫。
Rong_View_Wudimei:Wudimei開發(fā)的國產(chǎn)框架Rong Framework的模板引擎,它類似于smarty,優(yōu)點是速度快,缺點是模板標簽較少,不過夠用了。
框架介紹thinkphp
ThinkPHP是一個免費開源的,快速、簡單的面向?qū)ο蟮?輕量級PHP開發(fā)框架 ,創(chuàng)立于2006年初,遵循Apache2開源協(xié)議發(fā)布,是為了敏捷WEB應用開發(fā)和簡化企業(yè)應用開發(fā)而誕生的。ThinkPHP從誕生以來一直秉承簡潔實用的設(shè)計原則,在保持出色的性能和至簡的代碼的同時,也注重易用性。并且擁有眾多的原創(chuàng)功能和特性,在社區(qū)團隊的積極參與下,在易用性、擴展性和性能方面不斷優(yōu)化和改進,已經(jīng)成長為國內(nèi)最領(lǐng)先和*影響力的WEB應用開發(fā)框架,眾多的典型案例確保可以穩(wěn)定用于商業(yè)以及門戶級的開發(fā)。
PHP認證級別
PHP課程由初級(IFE)、中級(IPE)和高級(IAE)三個部分。
IFE即Index Front-end Engineer的縮寫,指數(shù)前端工程師的意思。
IPE即 Index PHP Engineer 的縮寫,意思是指數(shù)PHP工程師。
IAE即 Index architecture/advanced engineer 的縮寫,意思是:指數(shù)高級/架構(gòu)工程師。
PHP安全
PHP其實不過是Web服務器的一個模塊功能,所以首先要保證Web服務器的安全。當然Web服務器要安全又必須是先保證系統(tǒng)安全,這樣就扯遠了,無窮無盡。常見的web安全漏洞有:注入攻擊,跨站攻擊,服務器自身漏洞等,對應的詳細解釋,詳見:擴展閱讀中的《WEB安全性-2010_OWASP_TOP10》,這里有很詳盡的解釋。
PHP的優(yōu)點學習過程和方法
PHP的語法類似于C,Perl,ASP或者JSP。對于那些對上述之一的語言較熟悉的人來說,PHP太簡單了。相反的,如果你對PHP了解較多,那么你對于其他幾種語言的學習都很簡單了。你只需要很短的時間內(nèi)將PHP的核心語言特點全部掌握,你可能已經(jīng)非常了解HTML,甚至你已經(jīng)知道怎樣用編輯設(shè)計軟件或者手工來制作好看的WEB站點。由于PHP代碼能夠無障礙的添加進你的站點,在你設(shè)計和維護站點的同時,你可以很輕松的加入PHP使得你的站點更加具有動態(tài)特性。
數(shù)據(jù)庫連接
PHP可以編譯成具有與許多數(shù)據(jù)庫相連接的函數(shù)。PHP與MySQL是絕佳的組合,如果再加上Apache服務器,就是相當完美的了。你還可以自己編寫外圍的函數(shù)取間接存取數(shù)據(jù)庫。通過這樣的途徑當你更換使用的數(shù)據(jù)庫時,可以輕松的更改編碼以適應這樣的變化。PHPLIB就是最常用的可以提供一般事務需要的一系列基庫。
可擴展性
就像前面說的那樣,PHP已經(jīng)進入了一個高速發(fā)展的時期。對于一個非程序員來說為PHP擴展附加功能可能會比較難,但是對于一個PHP程序員來說并不困難。
PHP可伸縮性
傳統(tǒng)上網(wǎng)頁的交互作用是通過CGI來實現(xiàn)的。CGI程序的伸縮性不很理想,因為它為每一個正在運行的CGI程序開一個獨立進程。解決方法就是將經(jīng)常用來編寫CGI程序的語
言的解釋器編譯進你的web服務器(比如mod_perl,JSP)。PHP就可以以這種方式安裝,雖然很少有人愿意這樣以CGI方式安裝它。內(nèi)嵌的PHP可以具有更高的可伸縮性。
PHP免費安裝
PHP源代碼包安裝版:這個版本適合已經(jīng)有自己獨立的網(wǎng)站域名、網(wǎng)站空間的專業(yè)網(wǎng)站建設(shè)用戶。使用方法依然其為簡單,只需三步:
*、到官方網(wǎng)站:下載 PHP源代碼包安裝版*版本,解壓下載文件,將其中的全部內(nèi)容上傳到你的支持PHP的網(wǎng)站空間
第二、改更文件屬性,請將根目錄下以PHP為后綴名的文件和”/include/domain.php”和 “/attachments” 和 “/data”文件夾以及文件夾下所有的文件屬性改成“可讀”、“可寫”、“可執(zhí)行”,通常是“755”。
第三、打開你的網(wǎng)站根目錄,系統(tǒng)會自動運行setup安裝程序,按提示點下一步操作即可。
友情提示:當你下載我們的軟件并看到這份說明時,則說明你一定是對企業(yè)網(wǎng)站建設(shè)有一定的需求或者你是一個網(wǎng)站建設(shè)技術(shù)學習者。
文件格式
對于只含有 php 代碼的文件,我們將在文件結(jié)尾處忽略掉 "?>"。這是為了防止多余的空格或者其它字符影響到代碼。
例如:
$foo = foo ;
縮進應該能夠反映出代碼的邏輯結(jié)果,盡量使用四個空格,禁止使用制表符TAB,因為這樣能夠保證有跨客戶端編程器軟件的靈活性。
例如:
變量賦值建議保持相等間距和排列。
例如:
每行代碼長度應控制在80個字符以內(nèi),最長不超過120個字符。因為 linux 讀入文件一般以80列為單位,就是說如果一行代碼超過80個字符,那么系統(tǒng)將為此付出額外操作指令。這個雖然看起來是小問題,但是對于追求完美的程序員來說也是值得注意并遵守的規(guī)范。
每行結(jié)尾不允許有多余的空格。
Php文件記事本編輯亂碼問題
一般情況下,記事本編輯器在對文件進行完編輯并保存之時,其默認編碼為ANSI,中文。然則更多的時候,php在語言環(huán)境設(shè)置時語言多數(shù)為utf-8,直接保存并用于apache等http-server解析后就會出現(xiàn)亂碼。
為此,應該注意在用記事本編輯完后可將文件用“另存為”的方式對文件進行保存,并將“文件類型”選擇“所有文件”,編碼與文件指定語言編碼一致即可。
算數(shù)運算符
PHP 的運算符包括算術(shù)運算符、賦值運算符、比較運算符和邏輯運算符。
算數(shù)運算符:
加,減,乘,除,取模(取余)
+、-、*、/、%
賦值運算符:(以下解釋在許多書中有所不同)
賦值,加賦值,減賦值、乘賦值、除賦值,連字賦值
=、+=、-=、*=、/=、.=
位運算符:
位與、位或、位亦或、位非、左移、右移
&、|、^、~、<<、>>
比較運算符:
等于、全等于、不等于、不全等于、大于、小于、大于等于、小于等于
==、===、!=(<>)、!==、>、<、>=、<=
邏輯運算符:
邏輯與、邏輯或、邏輯非、邏輯亦或
&&、||、!、xor
字符串運算符:
. 連接兩個字符串
$_SERVER是PHP語言中獲取服務器相關(guān)資料的函數(shù),顯示相關(guān)函數(shù)代碼。
具體函數(shù):
$_SERVER【 PHP_SELF 】 #當前正在執(zhí)行腳本的文件名,與 document root相關(guān)。
$_SERVER【 argv 】 #傳遞給該腳本的參數(shù)。
$_SERVER【 argc 】 #包含傳遞給程序的命令行參數(shù)的個數(shù)(如果運行在命令行模式)。
$_SERVER【 GATEWAY_INTERFACE 】 #服務器使用的 CGI 規(guī)范的版本。例如,“CGI/1.1”。
$_SERVER【 SERVER_NAME 】 #當前運行腳本所在服務器主機的名稱。
$_SERVER【 SERVER_SOFTWARE 】 #服務器標識的字串,在響應請求時的頭部中給出。
$_SERVER【 SERVER_PROTOCOL 】 #請求頁面時通信協(xié)議的名稱和版本。例如,“HTTP/1.0”。
$_SERVER【 REQUEST_METHOD 】 #訪問頁面時的請求方法。例如:“GET”、“HEAD”,“POST”,“PUT”。
$_SERVER【 QUERY_STRING 】 #查詢(query)的字符串。
$_SERVER【 DOCUMENT_ROOT 】 #當前運行腳本所在的文檔根目錄。在服務器配置文件中定義。
$_SERVER【 HTTP_ACCEPT 】 #當前請求的 Accept: 頭部的內(nèi)容。
$_SERVER【 HTTP_ACCEPT_CHARSET 】 #當前請求的 Accept-Charset: 頭部的內(nèi)容。例如:“iso-8859-1,*,utf-8”。
$_SERVER【 HTTP_ACCEPT_Encoding 】 #當前請求的 Accept-Encoding: 頭部的內(nèi)容。例如:“gzip”。
$_SERVER【 HTTP_ACCEPT_LANGUAGE 】#當前請求的 Accept-Language: 頭部的內(nèi)容。例如:“en”。
$_SERVER【 HTTP_CONNECTION 】 #當前請求的 Connection: 頭部的內(nèi)容。例如:“Keep-Alive”。
$_SERVER【 HTTP_HOST 】 #當前請求的 Host: 頭部的內(nèi)容。
$_SERVER【 HTTP_REFERER 】 #鏈接到當前頁面的前一頁面的 URL 地址。
$_SERVER【 HTTP_USER_AGENT 】 #當前請求的 User_Agent: 頭部的內(nèi)容。
$_SERVER【 REMOTE_ADDR 】 #正在瀏覽當前頁面用戶的 IP 地址。
$_SERVER【 REMOTE_HOST 】 #正在瀏覽當前頁面用戶的主機名。
$_SERVER【 REMOTE_PORT 】 #用戶連接到服務器時所使用的端口。
$_SERVER【 SCRIPT_FILENAME 】 #當前執(zhí)行腳本的*路徑名。
$_SERVER【 SERVER_ADMIN 】 #管理員信息
$_SERVER【 SERVER_PORT 】 #服務器所使用的端口
$_SERVER【 SERVER_SIGNATURE 】 #包含服務器版本和虛擬主機名的字符串。
$_SERVER【 PATH_TRANSLATED 】 #當前腳本所在文件系統(tǒng)(不是文檔根目錄)的基本路徑。
$_SERVER【 SCRIPT_NAME 】 #包含當前腳本的路徑。這在頁面需要指向自己時非常有用。
$_SERVER【 REQUEST_URI 】 #訪問此頁面所需的 URI。例如,“/index.html”。
$_SERVER【 PHP_AUTH_USER 】 #當 PHP 運行在 Apache 模塊方式下,并且正在使用 HTTP 認證功能,這個變量便是用戶輸入的用戶名。
$_SERVER【 PHP_AUTH_PW 】 #當 PHP 運行在 Apache 模塊方式下,并且正在使用 HTTP 認證功能,這個變量便是用戶輸入的密碼。
$_SERVER【 AUTH_TYPE 】 #當 PHP 運行在 Apache 模塊方式下,并且正在使用 HTTP 認證功能,這個變量便是認證的類型。
$_SERVER【 PATH_INFO 】 #Contains any client-provided pathname information trailing the actual script filename but preceding the query string, if available. For instance, if the current script was accessed via the URL example/php/path_info.php/some/stuff?foo=bar, then$_SERVER【 PATH_INFO 】 would contain /some/stuff.
$_SERVER【 ORIG_PATH_INFO 】 #Original version of PATH_INFO before processed by PHP.
相關(guān)技巧:
1.獲取腳本網(wǎng)頁地址二級路徑:
案例如下,腳本網(wǎng)址路徑“so/so/index.php”,需要“so/so/”這個地址,而地址是根據(jù)不同博客地址而變化的。其中“so”可用“$_SERVER【 HTTP_HOST 】”生成,但網(wǎng)絡(luò)上卻沒有相關(guān)函數(shù)。
查找了php,發(fā)現(xiàn)一位網(wǎng)友有如下的生成思路:先用“$_SERVER【 PHP_SELF 】”生成腳本路徑:“/so/index.php”,再用“$scriptname=end(explode( / ,$_SERVER【 PHP_SELF 】));”截取腳本文件名:“index.php”,再用替換函數(shù)“$scriptpath=str_replace($scriptname, ,$_SERVER【 PHP_SELF 】);”獲取二級路徑:“/so/”。
然后使用顯示二級路徑,這樣就解決了缺失函數(shù)問題。
溫馨提醒:文章觀點來源網(wǎng)絡(luò),隨時光飛逝,歲月變遷,準確性、可靠性、難免有所變動,因此本文內(nèi)容僅供參考!