PHP到底有多糟糕?
網(wǎng)友解答: 四川優(yōu)就業(yè)的小編個(gè)人是十分支持PHP的,畢竟專做IT培訓(xùn)100年!但是為了回答你這個(gè)問(wèn)題,搬運(yùn)一個(gè)答案:韓天峰老師的評(píng)價(jià):PHP 語(yǔ)言有 20 多年的歷史,由于一直保持向下兼
四川優(yōu)就業(yè)的小編個(gè)人是十分支持PHP的,畢竟專做IT培訓(xùn)100年!但是為了回答你這個(gè)問(wèn)題,搬運(yùn)一個(gè)答案:
韓天峰老師的評(píng)價(jià):
PHP 語(yǔ)言有 20 多年的歷史,由于一直保持向下兼容。存在很多糟糕的地方,比如:
混亂的函數(shù)命名
不友好的 Array/String 函數(shù),至今數(shù)組和字符串的操作都沒(méi)有實(shí)現(xiàn) OO 接口
混亂的參數(shù)順序,導(dǎo)致完全記不住一個(gè)函數(shù)的用法,每次需要查手冊(cè)或借助 IDE
難用的 Zend API ,導(dǎo)致了在應(yīng)用與內(nèi)核之間,很難有一個(gè)中間層。比如 Node.js 做的就很好,它提供的 C++ API 可以讓其他 C++ 程序員很方便地為 Node 編寫擴(kuò)展模塊。而 Zend API 幾乎就是地獄模式,對(duì)開發(fā)者要求太高了。我在今年新開發(fā)的 PHP-X 就是為了解決這個(gè)問(wèn)題
缺乏異步 IO 網(wǎng)絡(luò)層,PHP 官方只提供了 sockets、stream、select 等 IO 函數(shù),無(wú)法滿足現(xiàn)在大并發(fā)時(shí)代的需求。所以就有了 Swoole 這個(gè)項(xiàng)目
缺乏對(duì)多線程的支持,雖然有一個(gè) pthreads 項(xiàng)目,但這個(gè)連玩具都算不上。多線程需要 PHP 語(yǔ)言底層進(jìn)行支持,而 PHP 設(shè)計(jì)之初就沒(méi)考慮過(guò)多線程
當(dāng)然,PHP 也有明顯的優(yōu)點(diǎn),比如其部署對(duì)于虛擬主機(jī)的友好超過(guò)(除了古老的 ASP 之外的)所有其他主流語(yǔ)言,因此在互聯(lián)網(wǎng)應(yīng)用爆發(fā)初期就占領(lǐng)了巨大市場(chǎng),一些世界上最大的網(wǎng)站最初(甚至至今)都是 PHP 寫的,這是其至今屹立不倒的核心原因。
網(wǎng)友解答:我1999年開始寫PHP,那年P(guān)HP還只是3,一個(gè)連session都需要自己實(shí)現(xiàn)的版本。
對(duì)于PHP來(lái)說(shuō)缺點(diǎn)的確很多,最典型的例子就是函數(shù)參數(shù)順序混亂,一會(huì)兒needle在第一個(gè),一會(huì)兒haystack在第一個(gè),這個(gè)對(duì)于初學(xué)者來(lái)說(shuō)真的是很暈的事情。
不過(guò)總得來(lái)說(shuō)PHP正在往一個(gè)好的方向發(fā)展,7重寫了內(nèi)核,性能在極端情況下提升了300%
其實(shí)我現(xiàn)在已經(jīng)很少寫PHP,如果是自己的項(xiàng)目,一般我會(huì)優(yōu)先選擇Python或者Java,但是作為早期就相當(dāng)屬性的語(yǔ)言,PHP我經(jīng)常會(huì)寫2行程序,比如把一個(gè)json文本展開看一下之類的。
還是那句話,語(yǔ)言沒(méi)有好壞,選擇語(yǔ)言的時(shí)候更多的情況是看合不合適~項(xiàng)目的預(yù)算、時(shí)間、后期成本等等,然后再對(duì)需求進(jìn)行評(píng)估,看看上哪個(gè)語(yǔ)言比較合適,組什么樣的團(tuán)隊(duì)比較合適。