PHP到底有多糟糕?
當(dāng)前位置:點(diǎn)晴教程→知識管理交流
→『 技術(shù)文檔交流 』
我來回答這個問題是告訴各位開發(fā)者:你們根本不會用PHP 這是個非常有趣的問題無論是提問者還是回答者,無論是支持者還是反對者,都沒有聊技術(shù)上的事,都只是觀念的碰撞. 這很好理解,因?yàn)镻HP已經(jīng)流行了那么多年了,技術(shù)上沒有那么多糟糕的地方,本質(zhì)上還是開發(fā)人員觀念的問題,這是一個我們必須要承認(rèn)的事實(shí),不同的開發(fā)人員的觀念是不一樣的,比如: 有的人認(rèn)為代碼是給人看的,他們狂熱的推崇ORM, 有的人認(rèn)為代碼是給機(jī)器跑的,拼接的SQL比什么都快; 學(xué)院派認(rèn)為一個語言需要有健壯的設(shè)計(jì),所以狂熱地推崇GO之類的語言, 實(shí)用派則認(rèn)為語言的任何發(fā)展方向都要為開發(fā)人員服務(wù),所以兼容性/實(shí)用性/穩(wěn)定性處于不可撼動的地位. 激進(jìn)的人總是想拋棄糟糕的,引入更酷的, 保守的人老是想著保留能用的,只引入不可或缺的. 注重長遠(yuǎn)架構(gòu)設(shè)計(jì)的人會對業(yè)務(wù)做出層層分層, 需要快速實(shí)現(xiàn)的人做個MVC就已經(jīng)謝天謝地了. 這種沖突很有意思,沒什么對錯,但我不是和事佬,我來回答這個問題是告訴各位開發(fā)者:你們根本不會用PHP(狗頭). 當(dāng)然,開個玩笑. PHP有很多打開方式,所以當(dāng)我們聊PHP時,最好說清楚自己在說什么,比如:
以上三種打開方式大家可能都或多或少的了解一些: PHP-FPM最流行的代表無疑是Wordpress,還有一大堆普遍常見的開發(fā)框架和開源產(chǎn)品,如ThinkPHP,Laravel,各類shop. PHP-CLI也是最近流行起來的開發(fā)方式,比如Workerman/Swoole/React-PHP,能夠獲得更高的性能(相對PHP-FPM,主要是頻繁加載等環(huán)節(jié)),類似Java和Go的部署模式,更多的網(wǎng)絡(luò)開發(fā)能力,比如長鏈接/微服務(wù),也有更安全的加載方式,比如以前的掛馬方式就廢了,PHP不再以動態(tài)加載的方式運(yùn)行. PHP-擴(kuò)展卻不是一個輕松地事,復(fù)雜的Zend-API讓人望而卻步,每個開發(fā)者都勸自己,不要搞擴(kuò)展,好好活著,沒必要深入C/C++,還不如學(xué)GO了.實(shí)際上PHP的擴(kuò)展也有很多開發(fā)方式,比如swoole作者的PHP-X,和我介紹過的一個項(xiàng)目:PHP-CPP,他們把復(fù)雜的Zend-API抽象封裝,讓擴(kuò)展的開發(fā)就像寫PHP那樣簡單(真的,使用PHP-CPP寫擴(kuò)展真的跟PHP一樣簡單,強(qiáng)烈推薦) 如何開發(fā) PHP 擴(kuò)展?PHP 擴(kuò)展應(yīng)該注意些什么? - PHP武器庫的回答 - 知乎 https://www.zhihu.com/question/20012801/answer/2390907392 幾個有趣的打開方式以上幾種用法算是"官方的","標(biāo)配的","兼容的"用法,就是說你在PHP-FPM可以運(yùn)行的代碼,在PHP-CLI也能運(yùn)行,在PHP-擴(kuò)展中也能調(diào)用成功. 但是這里我要介紹幾個其他的打開方式,他們或許不能完全兼容原來代碼的運(yùn)行方式,但也為我們的一些業(yè)務(wù)提供了一些新的開發(fā)方式,滿足我們一些特殊的要求. KPHPKPHP是一個PHP編譯器,能夠?qū)HP代碼編譯成本地二進(jìn)制文件. KPHP會將PHP的代碼轉(zhuǎn)換成等效的C++代碼,然后編譯生成的C++代碼并以嵌入式HTTP的方式運(yùn)行.可以把它認(rèn)為是PHP的"轉(zhuǎn)譯",因?yàn)樗前裀HP的代碼"翻譯"成C++的代碼,但最終效果來看,也算是一個PHP的"編譯器". KPHP不是面向JIT的,所有的了類型都是在編譯時(翻譯成C++時)推斷的,不存在"慢啟動"階段. 但是: KPHP并不是一個萬能的項(xiàng)目,他不是PHP的一個分支,也不是PHP的一個擴(kuò)展,它是一個全新的獨(dú)立的運(yùn)行PHP代碼的方式,他有很多的限制,你可能沒辦法編譯你現(xiàn)有的項(xiàng)目(比如ThinkPHP). KPHP的諸多限制:
KPHP和PHP本身有很多差異,比如在PHP中,運(yùn)行時才會報錯,而在KPHP中,必須修復(fù)所有錯誤才能運(yùn)行,再比如在KPHP中所有的代碼都是內(nèi)聯(lián)的,如果a文件需要b文件的函數(shù),那就require引入b文件,這時其他文件不需要引入b文件也能調(diào)用到那個函數(shù),同時KPHP不支持evel,反射,數(shù)組指針等等特性. 由于以上諸多限制,一般情況下你并不能將你現(xiàn)有的業(yè)務(wù)直接使用KPHP編譯成二進(jìn)制. 但是這并不代表他一無是處,你可以按照KPHP的規(guī)范標(biāo)準(zhǔn)去寫代碼,比如你系統(tǒng)中的某一個獨(dú)立的小模塊,然后把他編譯成二進(jìn)制文件,至少這部分系統(tǒng)不需要擔(dān)心代碼泄露的問題. 性能,你肯定想了解它的性能. 實(shí)際上對于密集的算法邏輯,比如冒泡排序,在網(wǎng)站給出的 測試中:
如果將冒泡排序使用跟多的數(shù)組函數(shù)進(jìn)行優(yōu)化,
在小編看來,KPHP的性能確實(shí)不錯,不過小編認(rèn)為KPHP更棒的地方在于能夠?qū)HP代碼編譯成二進(jìn)制文件,這樣我們在分發(fā)系統(tǒng)(產(chǎn)品)的時候,完全可以把最核心的技術(shù)和功能編譯成二進(jìn)制,避免代碼泄露. peachpie另一個有趣的項(xiàng)目是peachpie,它能將PHP便以為.NET,這樣就能獲得.NET的能力,比如跨平臺,二進(jìn)制. 它的目標(biāo)如下:
與之前介紹的KPHP而言,peachpie的目標(biāo)和定位是為PHP提供一個新的運(yùn)行平臺,并且應(yīng)當(dāng)完全利用和兼容PHP的全部生態(tài),這當(dāng)然是美好的愿望. 但實(shí)際上,peachpie也并沒有實(shí)現(xiàn)百分之百的PHP的特性,不過也完成了大部分: 更完整的函數(shù)表可以參考他的官網(wǎng). 在小編看來,peachpie也為我們提供了一個新的分發(fā)方式,我們可以將一些簡單地核心的最有價值的一部分功能使用peachpie來分發(fā),完全可以做到保護(hù)代碼的效果. PHP-JS這是一個很有趣的項(xiàng)目,他能夠使用PHP來運(yùn)行JS的代碼,是的,可以在PHP中運(yùn)行JS的代碼,就好像用PHP做了一個Node一樣,當(dāng)然并沒有Node那樣的生態(tài). 他可以在PHP中運(yùn)行JS,并且和JS之間互通變量函數(shù),讓小編很激動的是,也可以互通資源類型和對象,比如PDO, 我們可以在PHP中實(shí)例化一個PDO資源,然后傳遞到JS代碼當(dāng)中:
當(dāng)然小編多次嘗試安裝PHP-JS,但是他是一個C++擴(kuò)展,遇到了很多新手問題,以后有機(jī)會會繼續(xù)研究. PHP-CPP這個項(xiàng)目在前面已經(jīng)簡單介紹了一下,可以通過那個鏈接詳細(xì)查看,這里小編還是想推薦一下它. 簡單來說,就是使用C++來為PHP編寫擴(kuò)展,并且可以做到一個擴(kuò)展只在一個站點(diǎn)加載. 面對PHP的擴(kuò)展,每個人都會告訴你,ZendAPI是復(fù)雜的,混亂的,你馴服不了他,別浪費(fèi)時間了. 實(shí)際上是這樣的,但是PHP-CPP將ZendAPI封裝起來,并且提供了完善的文檔和注釋,使得使用C++開發(fā)擴(kuò)展變得非常容易和優(yōu)雅,寫起來甚至和PHP代碼一樣簡單. 并且我們都知道,使用擴(kuò)展來開發(fā)具體業(yè)務(wù)會有幾個問題,
實(shí)際上PHP-CPP完美的解決了這些問題,基本做法是,不要使用PHP原生的方式加載擴(kuò)展,而是先用PHP-CPP做一個加載擴(kuò)展的功能,使用C++的能力,來做動態(tài)加載,并且可以讓你的擴(kuò)展存儲在任意位置,隨意分發(fā),同時也可以讓加載的擴(kuò)展只對指定站點(diǎn)生效,不存在安全問題. 結(jié)論小編在開頭說大家不會PHP,其實(shí)只是一句玩笑,但是對于國內(nèi)大多數(shù)的開發(fā)展而言,包括PHP和其他的開發(fā)者,都有一個錯誤的概念:PHP=PHP-FPM。 就是說所有人都認(rèn)為PHP-FPM就是PHP,只能做HTTP。 實(shí)際上并不是,小編介紹的這幾個項(xiàng)目可能并不是主流趨勢,但是PHP-CLI的開發(fā)方式已經(jīng)流行起來了,比如ReactPHP在國外火了很久了,WebMan是workerman近兩年推出的一個面向HTTP的一個解決方案,Swoole則被各類培訓(xùn)機(jī)構(gòu)宣傳。 所以PHP到底有多糟糕呢? 其實(shí)沒那么糟糕,很多東西你不知道而已。 該文章在 2024/7/25 0:27:19 編輯過
|
相關(guān)文章
正在查詢... |