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