- TEL:131 7970 3111
-
慧網(wǎng)微信
- 掃描二維碼
- 關(guān)注邳州在線
-
手機(jī)網(wǎng)站
- 手機(jī)掃描二維碼
- 進(jìn)入手機(jī)站
網(wǎng)站地圖
付款方式
為什么說(shuō)用PHP開(kāi)發(fā)大型系統(tǒng)令人不爽
下面筆者會(huì)給出自己的理由,為什么PHP不適合于比小型業(yè)余網(wǎng)站更大的網(wǎng)站。
遞歸是一種函數(shù)調(diào)用自身的機(jī)制。這是一種強(qiáng)大的特性可以把某些復(fù)雜的東西變得很簡(jiǎn)單。有一個(gè)使用遞歸的例子是快速排序(quicksort)。不幸的是,PHP并不擅長(zhǎng)遞歸。Zeev,一個(gè)PHP開(kāi)發(fā)人員,說(shuō)道:“PHP 4.0(Zend)對(duì)密集數(shù)據(jù)使用了棧方式,而不是使用堆方式。也是說(shuō)它能容忍的遞歸函數(shù)的數(shù)量限制和其他語(yǔ)言比起來(lái)明顯少。”見(jiàn)bug 1901。這是一個(gè)很不好的借口。每一個(gè)編程語(yǔ)言都應(yīng)該提供良好的遞歸支持。
在幾年前,Apache發(fā)布了Web服務(wù)器的2.0版。這個(gè)版本支持多線程模式,在這個(gè)模式下,軟件一個(gè)一部分可以同時(shí)運(yùn)行多個(gè)。PHP的發(fā)明者說(shuō)PHP的核心是線程的,但是非核心模塊不一定是。但是十次有九次,你想要在PHP腳本中使用這種模塊,但這又使你的腳本不能合適Apache的多線程模式。這也是為什么PHP小組不推薦在Apache 2 的多線程模式下運(yùn)行PHP。不良的多線程模式支持使PHP常被認(rèn)為是Apache 2依然不流行的原因之一。
請(qǐng)閱讀這篇討論: Slashdot: Sites Rejecting Apache 2?.
通過(guò)使用緩存,PHP的性能可以陡增500%[見(jiàn)基準(zhǔn)測(cè)試]。那么為什么緩存沒(méi)有被構(gòu)建在PHP中呢?因?yàn)閆end——PHP的制造者,它在銷(xiāo)售自己的Zend Accelerator,所以當(dāng)然,他們不想拋棄自己的商業(yè)產(chǎn)品這塊肥肉。
但是有另一個(gè)可選擇的: APC. (Zend后來(lái)推出Zend Optimizer,免費(fèi)的加速器——譯者)
設(shè)想某個(gè)人制作了一個(gè)PHP模塊用來(lái)閱讀文件。模塊中一個(gè)函數(shù)叫做read。然后另一個(gè)人的模塊可以讀取網(wǎng)頁(yè)的,同樣包含一個(gè)函數(shù)read。然后我們無(wú)法同時(shí)使用這兩個(gè)模塊了,因?yàn)镻HP不知道你要用哪個(gè)函數(shù)。
但是有一個(gè)很簡(jiǎn)單的解決方法,那是命名空間。曾經(jīng)有人建議PHP5加入這個(gè)特性,但不幸得是他沒(méi)有這么做,F(xiàn)在,沒(méi)有命名空間,每個(gè)函數(shù)都必須加上模塊名作為前綴,來(lái)避免名稱(chēng)沖突。這導(dǎo)致了函數(shù)名恐怖得長(zhǎng),例如xsl_xsltprocessor_transform_to_xml讓代碼難于書(shū)寫(xiě)和理解。
很多程序員對(duì) 日期格式字符 都很熟悉,它是從UNIX和C語(yǔ)言中來(lái)的。其他一些編程語(yǔ)言采用了這個(gè)標(biāo)準(zhǔn),但是很奇怪的,PHP有它自己的一套完全不兼容的日期格式字符。在C中,“%j”表示一年中的當(dāng)天,在PHP中他表示一個(gè)月中的當(dāng)天。然而使事情更混亂的是:Smarty (一個(gè)很流行的PHP模版引擎)的 strftime 函數(shù)和 date_format 函數(shù),卻使用了C/UNIX的格式化字符。