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