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