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