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