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