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