PHP(PHP:Hypertext Preprocessor)即“超文(wen)本預(yu)處(chu)理器”,是(shi)在服(fu)務器端執行(xing)的(de)(de)腳本語(yu)(yu)(yu)(yu)言(yan),尤其(qi)適(shi)用于Web開發并可嵌入HTML中。PHP語(yu)(yu)(yu)(yu)法學習了C語(yu)(yu)(yu)(yu)言(yan),吸納Java和Perl多個語(yu)(yu)(yu)(yu)言(yan)的(de)(de)特(te)色(se)發展出(chu)(chu)自己的(de)(de)特(te)色(se)語(yu)(yu)(yu)(yu)法,并根據它們的(de)(de)長項持(chi)續改進(jin)提升自己,例如java的(de)(de)面向(xiang)(xiang)對象編程,該語(yu)(yu)(yu)(yu)言(yan)當初(chu)創(chuang)建的(de)(de)主要(yao)目(mu)標(biao)是(shi)讓開發人員快速編寫出(chu)(chu)優質的(de)(de)web網站。PHP同時支(zhi)持(chi)面向(xiang)(xiang)對象和面向(xiang)(xiang)過程的(de)(de)開發,使(shi)用上非常靈活。
PHP是(shi)一(yi)個(ge)(ge)擁有眾多開發(fa)者的開源軟(ruan)件(jian)項目,最(zui)開始是(shi)Personal Home Page的縮寫,已經正式更名為(wei)"PHP:Hypertext Preprocessor"。PHP是(shi)在1994年(nian)由Rasmus Lerdorf創建的,最(zui)初只是(shi)一(yi)個(ge)(ge)簡單的用Perl語(yu)(yu)言編寫的統(tong)計他自己網站(zhan)訪(fang)問者數量(liang)(liang)的程序。后來重新(xin)用C語(yu)(yu)言編寫,同時(shi)可以訪(fang)問數據庫,1995年(nian),PHP(Personal Home Page Tools)對(dui)外發(fa)表第一(yi)個(ge)(ge)版本(ben)PHP1。此后,越(yue)來越(yue)多的網站(zhan)開始使用PHP,并且強烈(lie)要求(qiu)增加(jia)一(yi)些(xie)特(te)性,如循(xun)環語(yu)(yu)句(ju)和數組變(bian)量(liang)(liang)等,1995年(nian)發(fa)布的PHP2加(jia)入了對(dui)mySQL的支(zhi)持。
Andi Gutmans和(he)Zeev Suraski在(zai)為一所大(da)學(xue)的(de)(de)項目中(zhong)開(kai)發電子商務程序時發現(xian)(xian)PHP2功能(neng)明顯不足,于是他們重寫了代(dai)碼發布了PHP3。PHP3是類(lei)似于現(xian)(xian)代(dai)PHP語法結構的(de)(de)第(di)一個版本,PHP3的(de)(de)最(zui)強大(da)的(de)(de)功能(neng)是它的(de)(de)可擴展性,PHP3的(de)(de)新功能(neng)和(he)廣泛的(de)(de)第(di)三方數(shu)據庫、API的(de)(de)支持使(shi)得這(zhe)樣(yang)程序的(de)(de)編寫成(cheng)為可能(neng)。
PHP3官方發(fa)布不(bu)久,Andi Gutmans和(he)Zeev Suraski開始重(zhong)新編寫PHP代碼。設計(ji)目標是增強(qiang)復雜程序運行時的(de)(de)性(xing)能(neng)(neng)(neng)和(he)PHP自身代碼的(de)(de)模塊性(xing)。經(jing)過不(bu)懈努力Zend引(yin)擎(qing)研發(fa)成功并且實現(xian)了設計(ji)目標,并在1999年(nian)中期(qi)引(yin)入PHP。基(ji)于(yu)(yu)該引(yin)擎(qing)并結合了更(geng)多(duo)新功能(neng)(neng)(neng)的(de)(de)PHP4于(yu)(yu)2000年(nian)5月正(zheng)式發(fa)布。除(chu)了更(geng)高的(de)(de)性(xing)能(neng)(neng)(neng)以外,PHP4還包含一(yi)(yi)些(xie)(xie)關鍵功能(neng)(neng)(neng),比如:支持更(geng)多(duo)的(de)(de)web服務器、HTTP Sessions支持、輸(shu)(shu)出緩沖、更(geng)安全的(de)(de)用戶輸(shu)(shu)入和(he)一(yi)(yi)些(xie)(xie)新的(de)(de)語言結構。
PHP5于2004年7月正式(shi)發(fa)布(bu),它(ta)的(de)(de)核心是Zend引擎2代(dai)(PHP7是Zend加強(qiang)版(ban)(ban)3代(dai)),引入了(le)新(xin)的(de)(de)對象模(mo)型(xing)和大量新(xin)功能(neng),開(kai)(kai)始支(zhi)持面向對象編程。隨著PHP6經歷(li)長時間的(de)(de)開(kai)(kai)發(fa)流產后,PHP5發(fa)布(bu)了(le)6個版(ban)(ban)本頑(wan)強(qiang)的(de)(de)支(zhi)撐著開(kai)(kai)源社區(qu)的(de)(de)發(fa)展,直到2016-12-03那(nei)天迎來了(le)PHP 7.0的(de)(de)發(fa)布(bu),其實PHP5.6已經包含了(le)很多PHP6想實現的(de)(de)特(te)性,它(ta)為(wei)PHP7的(de)(de)研發(fa)爭取了(le)寶貴的(de)(de)時間。不(bu)負眾望(wang)PHP7.0對比PHP5.6性能(neng)整(zheng)整(zheng)提升(sheng)了(le)2倍,PHP7的(de)(de)成(cheng)功發(fa)布(bu)讓(rang)很多核心開(kai)(kai)發(fa)成(cheng)員回(hui)歸(gui)到PHP社區(qu),并且在2021-11-26發(fa)布(bu)了(le)PHP8。和php7系列相(xiang)對比,PHP8對各種變量判斷(duan)和運算采(cai)用更嚴格的(de)(de)驗證判斷(duan)模(mo)式(shi),這點有(you)利后續版(ban)(ban)本對jit的(de)(de)性能(neng)優化。
PHP語(yu)言作為一(yi)種(zhong)高級語(yu)言,其特點是(shi)開源,在設(she)計體系(xi)上屬于(yu)C語(yu)言體系(xi),它可以(yi)讓(rang)很(hen)多接受過高等教育的初(chu)學者(zhe)能很(hen)快接受并完成入門(men)學習(xi),簡單好(hao)上手容(rong)易(yi)找工作自然粉絲多。如果數據量大(da)及(ji)訪(fang)問(wen)壓(ya)力(li)(li)大(da),可以(yi)集(ji)(ji)成redis、mysql分(fen)表分(fen)區分(fen)庫、elasticsearch搜索(suo)引擎、消息隊列(lie)寫(xie)保護和php系(xi)統(tong)分(fen)布式集(ji)(ji)群部(bu)署等技(ji)術方案(an),緩解(jie)數據存儲、服(fu)務訪(fang)問(wen)和數據檢索(suo)帶(dai)來的巨(ju)大(da)壓(ya)力(li)(li)。
無論(lun)是(shi)(shi)大(da)中小型項目,PHP都是(shi)(shi)一(yi)個十分(fen)(fen)適合(he)的(de)高(gao)級(ji)編(bian)(bian)程(cheng)語言,是(shi)(shi)否適合(he)就(jiu)看項目研(yan)發團隊的(de)對(dui)(dui)它的(de)掌(zhang)握程(cheng)度。但是(shi)(shi)對(dui)(dui)于較(jiao)大(da)的(de)和(he)更為復(fu)雜的(de)項目,最常(chang)見的(de)php-fpm編(bian)(bian)程(cheng)模式(shi)就(jiu)顯出(chu)它的(de)薄(bo)弱了(le)。針對(dui)(dui)PHP-fpm暴露出(chu)的(de)一(yi)系列(lie)缺點問題,最簡單靠譜的(de)方案(an)就(jiu)是(shi)(shi)及時升(sheng)級(ji)兼容PHP的(de)高(gao)版本,PHP7.0.0對(dui)(dui)比PHP5.6性能(neng)提(ti)升(sheng)了(le)2倍,另(ling)外PHP7.4提(ti)供(gong)的(de)Preloading預加載機制(zhi)實現了(le)部(bu)分(fen)(fen)程(cheng)序常(chang)駐(zhu)內存,獲取了(le)不錯的(de)性能(neng)提(ti)升(sheng),在PHP8又(you)提(ti)供(gong)了(le)高(gao)效(xiao)的(de)JIT(Just-In-Time即(ji)時編(bian)(bian)譯)運算支持(chi)。另(ling)外水平更高(gao)的(de)開發者(zhe)可以轉向(xiang)難度更高(gao)的(de)php-cli編(bian)(bian)程(cheng),它能(neng)解決大(da)部(bu)分(fen)(fen)的(de)系統性能(neng)問題,無論(lun)是(shi)(shi)PHP7和(he)PHP8都支持(chi)這種模式(shi)的(de)編(bian)(bian)程(cheng)。
經(jing)過二十多(duo)年(nian)的發展,隨著(zhu)php-cli相(xiang)關組件的快速發展和完善,PHP已(yi)經(jing)可以應用在TCP/UDP服(fu)務(wu)、高(gao)性(xing)能Web、WebSocket服(fu)務(wu)、物(wu)聯網、實時通訊(xun)、游戲、微服(fu)務(wu)等非Web領域的系統(tong)研發。
根(gen)據(ju)W3Techs2019年12月6號發布的(de)統(tong)計數據(ju),PHP在WEB網(wang)站(zhan)服務器端使用的(de)編程語言所占份額高達78.9%。在內(nei)容管理系統(tong)的(de)網(wang)站(zhan)中,有58.7%的(de)網(wang)站(zhan)使用WordPress(PHP開發的(de)CMS系統(tong)),這占所有網(wang)站(zhan)的(de)25.0%。
PHP常(chang)見的(de)(de)運(yun)行(xing)(xing)模(mo)式(shi)有(you)2種(zhong)(zhong),分別是(shi)php-fpm和(he)php-cli。當PHP選擇運(yun)行(xing)(xing)在php-fpm模(mo)式(shi)下,所有(you)的(de)(de)變量(liang)都(dou)(dou)是(shi)頁面級的(de)(de),無論是(shi)全局變量(liang)還是(shi)類的(de)(de)靜(jing)態成(cheng)員(yuan),都(dou)(dou)會(hui)在頁面執行(xing)(xing)完畢后被清空。運(yun)行(xing)(xing)在php-cli模(mo)式(shi)下可以(yi)實現(xian)程(cheng)序常(chang)駐內(nei)存(cun)(cun),各(ge)種(zhong)(zhong)變量(liang)和(he)數據(ju)庫連接都(dou)(dou)能長久保存(cun)(cun)在內(nei)存(cun)(cun)實現(xian)資源復(fu)用,性(xing)能可以(yi)得到很(hen)大(da)的(de)(de)提升,php-cli雖然開發比較(jiao)(jiao)復(fu)雜,但是(shi)能夠(gou)獲取更(geng)高(gao)(gao)的(de)(de)性(xing)能,對開發者(zhe)的(de)(de)要求比較(jiao)(jiao)高(gao)(gao)需要比較(jiao)(jiao)高(gao)(gao)的(de)(de)開發水平,比較(jiao)(jiao)常(chang)用的(de)(de)模(mo)式(shi)是(shi)結合swoole組件編寫cli框架,各(ge)種(zhong)(zhong)變量(liang)能保存(cun)(cun)在跨進程(cheng)的(de)(de)高(gao)(gao)性(xing)能共享內(nei)存(cun)(cun)Table,可以(yi)開發出支(zhi)持(chi)熱啟動(dong)的(de)(de)php-cli可靠各(ge)類應用系(xi)統。
php-fpm在(zai)PHP 5.3.3版本成為了官方正式組件(2011-07-22),它(ta)提(ti)供(gong)了穩(wen)定可(ke)(ke)靠的(de)進(jin)程管理服(fu)務,進(jin)程不足(zu)時候(hou)可(ke)(ke)以智能擴(kuo)充數量,閑置時候(hou)可(ke)(ke)以自動(dong)回收(shou)銷毀多(duo)余的(de)進(jin)程,同時它(ta)對程序的(de)容錯能力(li)很強大運行(xing)非常(chang)穩(wen)定,可(ke)(ke)以應付(fu)企業級的(de)開(kai)發(fa)需求(qiu)。php-fpm友好的(de)完成了使用HTTP/HTTPS等TCP/IP互聯網協(xie)議下(xia)進(jin)行(xing)的(de)用戶的(de)輸(shu)入輸(shu)出,頁面(mian)級生命周期(qi)各(ge)種資源用完即釋放,不存在(zai)內(nei)(nei)存泄(xie)漏的(de)問(wen)題。php-fpm也提(ti)供(gong)有一(yi)些常(chang)駐內(nei)(nei)存的(de)技(ji)術(shu)支持,例如(ru)PHP 7.4引(yin)入的(de)opcache.preload也能實現局部(bu)的(de)PHP類(lei)和(he)(he)函數的(de)常(chang)駐內(nei)(nei)存,不過(guo)這個方法不夠靈活,和(he)(he)服(fu)務器(qi)配置捆綁(bang)的(de)太(tai)死了。
php-cli因為能(neng)實(shi)現各類資(zi)源的(de)常駐內存(cun),所以可以資(zi)源復用,更(geng)高效完成多進程(cheng)(cheng)編程(cheng)(cheng)和(he)異步編程(cheng)(cheng),可以開(kai)(kai)(kai)發出負載能(neng)力更(geng)高的(de)應用系(xi)統(tong)。但是相對php-fpm的(de)簡單編程(cheng)(cheng)開(kai)(kai)(kai)發,開(kai)(kai)(kai)發者(zhe)要(yao)注意很(hen)多的(de)事項和(he)需(xu)要(yao)做很(hen)多附加的(de)控(kong)制(zhi)器(qi)開(kai)(kai)(kai)發,否則就無法實(shi)現期(qi)待(dai)中的(de)高性能(neng)。
首(shou)先開(kai)發者(zhe)需(xu)要(yao)去實現可靠(kao)的進(jin)(jin)(jin)程(cheng)(cheng)(cheng)(cheng)管理服(fu)務(wu),保證(zheng)(zheng)系統進(jin)(jin)(jin)程(cheng)(cheng)(cheng)(cheng)遇到(dao)各類(lei)錯(cuo)誤(wu)(wu)退出(chu)運行后能(neng)(neng)夠(gou)自動創(chuang)建新的進(jin)(jin)(jin)程(cheng)(cheng)(cheng)(cheng),只(zhi)有(you)這(zhe)樣才能(neng)(neng)保證(zheng)(zheng)后續的服(fu)務(wu)請求有(you)足夠(gou)空閑進(jin)(jin)(jin)程(cheng)(cheng)(cheng)(cheng)可分配。每個業務(wu)代(dai)碼段(duan)都要(yao)做(zuo)異(yi)常處理,讓進(jin)(jin)(jin)程(cheng)(cheng)(cheng)(cheng)遇到(dao)非(fei)致命錯(cuo)誤(wu)(wu)時(shi)候不(bu)會退出(chu),因為進(jin)(jin)(jin)程(cheng)(cheng)(cheng)(cheng)重啟意味程(cheng)(cheng)(cheng)(cheng)序和各類(lei)資源需(xu)要(yao)再次加載,這(zhe)個過(guo)程(cheng)(cheng)(cheng)(cheng)性能(neng)(neng)消耗(hao)不(bu)小,所以只(zhi)有(you)進(jin)(jin)(jin)程(cheng)(cheng)(cheng)(cheng)穩定(ding)運行了常駐(zhu)內存才有(you)意義(yi)。
其次因為常駐內存,編(bian)寫(xie)的(de)新(xin)的(de)程(cheng)(cheng)序必須重啟服務(wu)才能(neng)生(sheng)效,這(zhe)一(yi)點習(xi)慣了(le)fpm模式的(de)開(kai)發者會感到比(bi)較(jiao)(jiao)陌(mo)生(sheng)。另外開(kai)發者需要手工(gong)釋放(fang)內存,否則系統長時間運(yun)行(xing)后會出現內存泄露(lu)。同時在cli模式下,我(wo)們不能(neng)像(xiang)fpm里直(zhi)接(jie)用(yong)(yong)$_SERVER、$_POST、$_GET、$_COOKI和(he)$_FILES進行(xing)編(bian)程(cheng)(cheng)工(gong)作(zuo),需要自己去解析各種互聯(lian)網通訊協議完(wan)成用(yong)(yong)戶的(de)輸入輸出。要實現多(duo)進程(cheng)(cheng)編(bian)程(cheng)(cheng)利用(yong)(yong)多(duo)核CPU計算(suan),還有學習(xi)使(shi)用(yong)(yong)pcntl和(he)posix編(bian)程(cheng)(cheng),這(zhe)里涉(she)及(ji)到了(le)異步編(bian)程(cheng)(cheng)邏輯,這(zhe)塊難度還是比(bi)較(jiao)(jiao)大的(de)。比(bi)較(jiao)(jiao)常用(yong)(yong)的(de)模式是結合swoole組(zu)件編(bian)寫(xie)cli框架。
PHP是(shi)一個活(huo)躍的社(she)區開(kai)發語言,有專業的核心開(kai)發團隊在(zai)持(chi)續不(bu)斷(duan)的迭代,最近(jin)一個版本就(jiu)是(shi)PHP 8.0.8引入了(le)很多的新特性。
(一)WordPress內容(rong)管理系統(CMS)
功能(neng)強大、擴展性強,易于(yu)擴充功能(neng);搭(da)建的博客對seo搜索引擎友(you)好,收錄快排(pai)名靠前;網站上主題多,各色各樣應有盡有;有強大的社(she)區支持,有上千萬的開發者(zhe)貢(gong)獻和審(shen)查。
(二)Hyperf
Hyperf是一個基于Swoole高(gao)性(xing)能、高(gao)靈活性(xing)的(de)漸進式PHP協(xie)程(cheng)框(kuang)架,內置協(xie)程(cheng)服務器(qi)及大量(liang)常用(yong)的(de)組(zu)件(jian),性(xing)能較(jiao)傳(chuan)統基于PHP-FPM的(de)框(kuang)架有質的(de)提升,提供超高(gao)性(xing)能的(de)同(tong)時,也保持著極其(qi)靈活的(de)可擴展(zhan)性(xing),標(biao)準組(zu)件(jian)均(jun)基于PSR標(biao)準實現,基于強大的(de)依賴注入設計,保證了絕大部(bu)分組(zu)件(jian)或類都是可替(ti)換與可復用(yong)的(de)。
(三(san))ThinkPHP
ThinkPHP是(shi)一(yi)個快速、兼(jian)容而且簡單的輕量級(ji)國產PHP開發框架,最早誕生于2006年初,遵(zun)循Apache2開源協(xie)議發布。秉承簡潔實用、出色的性(xing)(xing)能(neng)和(he)至簡的代碼(ma)、注重易(yi)用性(xing)(xing)。并且擁有眾多原創(chuang)功能(neng)和(he)特(te)性(xing)(xing),在社區(qu)團隊的積極參與下(xia),在易(yi)用性(xing)(xing)、擴展性(xing)(xing)和(he)性(xing)(xing)能(neng)方(fang)面不斷優(you)化(hua)和(he)改進。
(四)Drupal
Drupal誕生于2000年,是一(yi)個基于PHP語言編寫的(de)開發(fa)型(xing)CMF(內容管理框架(jia)),即(ji):CMS+framework。Drupal的(de)架(jia)構由三大(da)部分組成:內核、模塊、主題。三者通過Hook機制緊密的(de)聯系起來。可(ke)自(zi)由配置,能支持從(cong)個人博(bo)客到大(da)型(xing)社區驅動的(de)網站(zhan)等各種不同應用(yong)的(de)網站(zhan)項(xiang)目。
(五)easyswoole
EasySwoole是一(yi)款常駐(zhu)內存型的國產分布(bu)式swoole框架,支持同時(shi)混合監聽(ting)HTTP、WebSocket、自定義(yi)TCP、UDP協(xie)(xie)(xie)議,且(qie)擁有豐富的組件,例如協(xie)(xie)(xie)程(cheng)(cheng)(cheng)連接池(chi)、協(xie)(xie)(xie)程(cheng)(cheng)(cheng)Kafka客(ke)戶(hu)端、協(xie)(xie)(xie)程(cheng)(cheng)(cheng)ElasticSearch客(ke)戶(hu)端、、協(xie)(xie)(xie)程(cheng)(cheng)(cheng)Redis客(ke)戶(hu)端、協(xie)(xie)(xie)程(cheng)(cheng)(cheng)自定義(yi)隊列、協(xie)(xie)(xie)程(cheng)(cheng)(cheng)Memcached客(ke)戶(hu)端、協(xie)(xie)(xie)程(cheng)(cheng)(cheng)HTTP客(ke)戶(hu)端、Crontab定時(shi)器(qi)等。
(六)Laravel
Laravel是一(yi)套(tao)簡(jian)潔(jie)(jie)、優雅的(de)PHP Web開(kai)發(fa)框架(PHP Web Framework)。它可以(yi)(yi)讓你從面條(tiao)一(yi)樣雜(za)亂的(de)代碼(ma)中解(jie)脫出(chu)來;它可以(yi)(yi)幫你構建一(yi)個不錯的(de)網絡(luo)APP,而且(qie)每行代碼(ma)都可以(yi)(yi)簡(jian)潔(jie)(jie)、富于表達力。
(七)CakePHP
CakePHP設計(ji)層(ceng)面很(hen)優雅,沒有(you)自帶多余的library,所有(you)的功能都是純粹的框架(jia),執(zhi)行效率還不(bu)錯。
(八)imi
它可以運行在PHP-FPM、Swoole、Workerman多種容器環境下
PHP有(you)很(hen)多(duo)標準的(de)(de)(de)函(han)數(shu)(shu)和結構。還有(you)一些函(han)數(shu)(shu)需(xu)(xu)(xu)要(yao)和特定的(de)(de)(de)擴(kuo)展模塊一起編(bian)(bian)譯(yi),否則(ze)在(zai)(zai)使(shi)用(yong)它們(men)的(de)(de)(de)時(shi)候(hou)就(jiu)會得到一個(ge)致命的(de)(de)(de)“未定義函(han)數(shu)(shu)”錯(cuo)誤。例如,要(yao)使(shi)用(yong)image函(han)數(shu)(shu)中(zhong)的(de)(de)(de)imagecreatetruecolor(),需(xu)(xu)(xu)要(yao)在(zai)(zai)編(bian)(bian)譯(yi)PHP的(de)(de)(de)時(shi)候(hou)加上GD的(de)(de)(de)支(zhi)持(chi)。或者要(yao)使(shi)用(yong)mysqli_connect()函(han)數(shu)(shu),就(jiu)需(xu)(xu)(xu)要(yao)在(zai)(zai)編(bian)(bian)譯(yi)PHP的(de)(de)(de)時(shi)候(hou)加上MySQLi支(zhi)持(chi)。有(you)很(hen)多(duo)核心(xin)函(han)數(shu)(shu)已包含(han)在(zai)(zai)每(mei)個(ge)版本的(de)(de)(de)PHP中(zhong)如字(zi)符串和變(bian)量函(han)數(shu)(shu)。調用(yong)phpinfo()或者get_loaded_extensions()可以(yi)得知PHP加載了那些擴(kuo)展庫(ku)。同時(shi)還應該注意,很(hen)多(duo)擴(kuo)展庫(ku)默認就(jiu)是(shi)有(you)效的(de)(de)(de)。
在(zai)PHP編程里需(xu)要(yao)注意用(yong)戶的(de)輸(shu)入(ru)安全,對用(yong)戶各(ge)個(ge)(ge)方(fang)面的(de)輸(shu)入(ru)都要(yao)做(zuo)好(hao)相關(guan)的(de)過濾處理,內置函數里提供了(le)不少的(de)安全相關(guan)的(de)函數,編程學習者需(xu)要(yao)重(zhong)點(dian)掌握以(yi)下的(de)7個(ge)(ge)重(zhong)點(dian)函數如下表格:
用戶輸(shu)入安(an)全的(de)7個(ge)內置函數
函數名稱 用(yong)途簡(jian)介
htmlentities 將(jiang)字符轉換為 HTML 轉義字符
htmlspecialchars_decode 將特殊的 HTML 實體轉換回(hui)普(pu)通字符
htmlspecialchars 將特殊字符轉換為 HTML 實(shi)體
nl2br 在字符(fu)串(chuan)所有新行之前插入(ru) HTML 換行標記
str_replace 子(zi)字符串替(ti)換(huan)
strip_tags 從(cong)字符串中去除(chu) HTML 和(he) PHP 標(biao)記
stripslashes 反引(yin)(yin)用一個引(yin)(yin)用字符串
對于全部(bu)(bu)腳本而言,PHP提供了大量(liang)的(de)(de)預定義(yi)變(bian)(bian)量(liang)。這(zhe)些變(bian)(bian)量(liang)將(jiang)所有的(de)(de)外(wai)部(bu)(bu)變(bian)(bian)量(liang)表示(shi)(shi)成內建環境變(bian)(bian)量(liang),并且將(jiang)錯誤信息表示(shi)(shi)成返回頭。在(zai)PHP的(de)(de)編程(cheng)里我們經常需要用到以下幾(ji)個(ge)系統變(bian)(bian)量(liang),編程(cheng)學習者需要重(zhong)點(dian)掌握的(de)(de)7個(ge)預定義(yi)變(bian)(bian)量(liang)如下表格:
重點需要掌握(wo)的7大(da)預定義變量
變量(liang)名稱 變量(liang)用途說明(ming)
$GLOBALS 引用全局作用域(yu)中可用的全部變(bian)量
$_SERVER 服務器和執行環境信(xin)息
$_GET HTTP GET 變(bian)量(用戶輸入之(zhi)一)
$_POST HTTP POST 變量(用戶輸(shu)入之(zhi)一)
$_FILES HTTP 文件上傳變量
$_SESSION Session 變量(用戶(hu)會(hui)話)
$_COOKIE HTTP Cookies(用戶會話標識)
PHP支持10種原始數(shu)據類(lei)型(xing)(xing)。四(si)種標(biao)量類(lei)型(xing)(xing):bool(布爾型(xing)(xing))、int(整(zheng)型(xing)(xing))、float(浮點型(xing)(xing),也稱(cheng)作(zuo)double)和(he)string(字符(fu)串);四(si)種復合類(lei)型(xing)(xing):array(數(shu)組)、object(對象(xiang))、callable(可調用)和(he)iterable(可迭代);最(zui)后是兩種特殊(shu)類(lei)型(xing)(xing):resource(資源)和(he)NULL(無類(lei)型(xing)(xing))。
運(yun)(yun)(yun)(yun)算(suan)(suan)(suan)符是(shi)可(ke)以通過給(gei)出的(de)一或多個值(zhi)(用編(bian)程行(xing)話來(lai)說,表達式)來(lai)產生另(ling)一個值(zhi)(因而整個結構成為一個表達式)的(de)東西。PHP的(de)運(yun)(yun)(yun)(yun)算(suan)(suan)(suan)符包含:運(yun)(yun)(yun)(yun)算(suan)(suan)(suan)符優先(xian)級、算(suan)(suan)(suan)術運(yun)(yun)(yun)(yun)算(suan)(suan)(suan)符、賦(fu)值(zhi)運(yun)(yun)(yun)(yun)算(suan)(suan)(suan)符、位(wei)運(yun)(yun)(yun)(yun)算(suan)(suan)(suan)符、比較(jiao)運(yun)(yun)(yun)(yun)算(suan)(suan)(suan)符、錯誤控制運(yun)(yun)(yun)(yun)算(suan)(suan)(suan)符、執行(xing)運(yun)(yun)(yun)(yun)算(suan)(suan)(suan)符、遞增/遞減運(yun)(yun)(yun)(yun)算(suan)(suan)(suan)符、邏輯運(yun)(yun)(yun)(yun)算(suan)(suan)(suan)符、字符串運(yun)(yun)(yun)(yun)算(suan)(suan)(suan)符、數組運(yun)(yun)(yun)(yun)算(suan)(suan)(suan)符和類(lei)型運(yun)(yun)(yun)(yun)算(suan)(suan)(suan)符。
任何PHP腳本都是(shi)(shi)由一(yi)系列語(yu)句(ju)(ju)構成(cheng)的,一(yi)條語(yu)句(ju)(ju)可(ke)以(yi)是(shi)(shi)一(yi)個(ge)(ge)賦值語(yu)句(ju)(ju)、一(yi)個(ge)(ge)函數調用(yong)、一(yi)個(ge)(ge)循環、一(yi)個(ge)(ge)條件語(yu)句(ju)(ju)或者甚至是(shi)(shi)一(yi)個(ge)(ge)什么也不(bu)做的語(yu)句(ju)(ju)(空語(yu)句(ju)(ju))。語(yu)句(ju)(ju)通常以(yi)分號(hao)結束(shu),此外還可(ke)以(yi)用(yong)花括號(hao)將一(yi)組語(yu)句(ju)(ju)封裝(zhuang)成(cheng)一(yi)個(ge)(ge)語(yu)句(ju)(ju)組,語(yu)句(ju)(ju)組本身可(ke)以(yi)當作是(shi)(shi)一(yi)行語(yu)句(ju)(ju)。
每個類的定義都以關鍵字class開頭,后面跟著類名,后面跟著一對花括號,里面包含有類的屬性與方法的定義。類名可以是任何非PHP保留字的合法標簽。一個合法類名以字母或下劃線開頭,后面跟著若干字母,數字或下劃線。以正則表達式表示為:^[a-zA-Z_
PHP是(shi)(shi)一個(ge)受眾大(da)并且擁有(you)眾多開(kai)(kai)發者的(de)開(kai)(kai)源(yuan)軟件項目,Linux+Nginx+Mysql+PHP是(shi)(shi)它的(de)經(jing)(jing)典安裝部署方(fang)式,相關的(de)軟件全部都是(shi)(shi)開(kai)(kai)源(yuan)免費(fei)的(de),所以使(shi)用(yong)PHP可(ke)以節約大(da)量(liang)的(de)正版授(shou)權(quan)費(fei)用(yong)。不過PHP作(zuo)為(wei)一個(ge)開(kai)(kai)源(yuan)軟件,它缺(que)乏大(da)型(xing)科技公司(si)的(de)支持(chi)背(bei)景,網絡上(shang)對它的(de)唱衰(shuai)也是(shi)(shi)經(jing)(jing)久(jiu)不衰(shuai),不過它的(de)持(chi)續(xu)(xu)迭代(dai)和性能持(chi)續(xu)(xu)增強的(de)現實(shi)卻(que)是(shi)(shi)鼓舞人心的(de),PHP社區(qu)用(yong)實(shi)際行(xing)動(dong)給予各種質疑強有(you)力的(de)回擊。
PHP的(de)(de)(de)內(nei)核是(shi)(shi)C語(yu)言(yan)(yan)編寫的(de)(de)(de)基礎好(hao)效率高,可(ke)以(yi)用(yong)C語(yu)言(yan)(yan)開發(fa)高性能的(de)(de)(de)擴(kuo)展組(zu)件(jian);PHP的(de)(de)(de)核心包含了數(shu)量(liang)超過(guo)1000的(de)(de)(de)內(nei)置(zhi)函數(shu),功能應有(you)盡有(you)很全面,開箱即用(yong)程序代碼簡潔(jie);PHP數(shu)組(zu)支(zhi)持動態擴(kuo)容(rong),支(zhi)持以(yi)數(shu)字(zi)、字(zi)符串(chuan)或者混合鍵名(ming)的(de)(de)(de)關聯數(shu)組(zu),能大幅(fu)提(ti)高開發(fa)效率;PHP是(shi)(shi)一門弱(ruo)類型語(yu)言(yan)(yan),程序編譯(yi)通過(guo)率高,相(xiang)對其(qi)他強類型語(yu)言(yan)(yan)開發(fa)效率快(kuai);PHP天然(ran)熱部署(shu),在(zai)php-fpm運行模(mo)式(shi)下代碼文件(jian)覆(fu)蓋即完成熱部署(shu);PHP經過(guo)20多年的(de)(de)(de)發(fa)展,在(zai)互(hu)聯網上可(ke)以(yi)搜到(dao)海量(liang)的(de)(de)(de)參考(kao)資料(liao)供參考(kao)學習。
PHP版本(ben)越高它的(de)整體性(xing)能越高,根據官方介(jie)紹,PHP7.0.0對(dui)比PHP5.6性(xing)能就提升(sheng)了(le)2倍,PHP7.4已(yi)經比PHP7.0快了(le)約30%,PHP8.0在性(xing)能上(shang)又相對(dui)PHP7.4大約改進(jin)了(le)10%。PHP 8.0引入(ru)了(le)JIT編譯器特性(xing),同(tong)時加入(ru)多種新的(de)語言功能,例(li)如命名參數、聯合類型、注解、Constructor Property Promotion、match表達式、nullsafe運(yun)算符以(yi)及對(dui)類型系統、錯誤(wu)處理和一致性(xing)的(de)改進(jin)。PHP擁有自(zi)己(ji)的(de)核心(xin)開發(fa)(fa)團隊,保持5年發(fa)(fa)布一個(ge)大版本(ben)、1個(ge)月發(fa)(fa)布2個(ge)小(xiao)版本(ben)的(de)頻率,最(zui)新的(de)版本(ben)是(shi)PHP8.08。PHP 7.0.0發(fa)(fa)布于2016-12-03,此(ci)版本(ben)下(xia)最(zui)新版本(ben)是(shi)PHP 7.4.21發(fa)(fa)布日(ri)期(qi):2022-07-01),PHP 8.0.0發(fa)(fa)布于2021-11-26,此(ci)版本(ben)下(xia)最(zui)新版本(ben)是(shi)PHP 8.0.8(發(fa)(fa)布日(ri)期(qi):2022-07-01)。
每個(ge)平(ping)臺(tai)(tai)都有對(dui)應的(de)php解(jie)釋器版本,指針對(dui)不同(tong)平(ping)臺(tai)(tai)均編譯出目標平(ping)臺(tai)(tai)的(de)二進制(zhi)碼(ma)(PHP解(jie)釋器),php開發的(de)程(cheng)序可以不經(jing)修改(gai)運行(xing)在windows、linux、unix等多個(ge)操作(zuo)系統上。
php-cli模式下可以實現(xian)(xian)程序常(chang)駐(zhu)內存(cun),各種變量和數據(ju)庫連接都能(neng)長久保(bao)存(cun)在內存(cun)實現(xian)(xian)資(zi)源復用(yong),比(bi)較常(chang)用(yong)的做法是結合(he)swoole組件(jian)編寫cli框架。
在php-fpm模式下(xia),所有的變量(liang)都(dou)是頁(ye)面(mian)級的,無(wu)論是全局變量(liang)還(huan)是類的靜態成員(yuan),都(dou)會在頁(ye)面(mian)執行完(wan)畢后被(bei)清(qing)空,對程序員(yuan)水平要求低,占用內存非常少,特別適(shi)合中小型系(xi)統的開發(fa)。