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