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