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