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