熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

簡評用PHP開發大型系統的缺點

2013-11-15 12:43:23  來源: PHP編程 

  筆者在過去的四年裡一直致力於PHP應用的開發PHP確實十分容易編寫但是PHP也有一些十分嚴重的缺陷

  下面筆者會給出自己的理由為什麼PHP不適合於比小型業余網站更大的網站

   對遞歸的不良支持

  遞歸是一種函數調用自身的機制這是一種強大的特性可以把某些復雜的東西變得很簡單有一個使用遞歸的例子是快速排序(quicksort)不幸的是PHP並不擅長遞歸Zeev一個PHP開發人員說道PHP (Zend)對密集數據使用了棧方式而不是使用堆方式也就是說它能容忍的遞歸函數的數量限制和其他語言比起來明顯少見bug 這是一個很不好的借口每一個編程語言都應該提供良好的遞歸支持

   許多PHP模塊都不是線程安全的

  在幾年前Apache發布了Web服務器的這個版本支持多線程模式在這個模式下軟件一個一部分可以同時運行多個PHP的發明者說PHP的核心是線程安全的但是非核心模塊不一定是但是十次有九次你想要在PHP腳本中使用這種模塊但這又使你的腳本不能合適Apache的多線程模式這也是為什麼PHP小組不推薦在Apache 的多線程模式下運行PHP不良的多線程模式支持使PHP常被認為是Apache 依然不流行的原因之一

   PHP 由於商業原因而不健全

  通過使用緩存PHP的性能可以陡增%[見基准測試]那麼為什麼緩存沒有被構建在PHP中呢?因為Zend——PHP的制造者它在銷售自己的Zend Accelerator所以當然他們不想拋棄自己的商業產品這塊肥肉

  但是有另一個可選擇的 APC (Zend後來推出Zend Optimizer免費的加速器——譯者)

   沒有命名空間

  設想某個人制作了一個PHP模塊用來閱讀文件模塊中一個函數叫做read然後另一個人的模塊可以讀取網頁的同樣包含一個函數read然後我們就無法同時使用這兩個模塊了因為PHP不知道你要用哪個函數

  但是有一個很簡單的解決方法那就是命名空間曾經有人建議PHP加入這個特性但不幸得是他沒有這麼做現在沒有命名空間每個函數都必須加上模塊名作為前綴來避免名稱沖突這導致了函數名恐怖得長例如xsl_xsltprocessor_transform_to_xml讓代碼難於書寫和理解

   不標准的日期格式字符

  很多程序員對 日期格式字符 都很熟悉它是從UNIX和C語言中來的其他一些編程語言采用了這個標准但是很奇怪的PHP有它自己的一套完全不兼容的日期格式字符在C中%j表示一年中的當天在PHP中他表示一個月中的當天然而使事情更混亂的是Smarty (一個很流行的PHP模版引擎)的 strftime 函數和 date_format 函數卻使用了C/UNIX的格式化字符

   混亂的許可證

  你也許認為PHP是免費的所有的在手冊中提到的PHP模塊也是免費的錯了!例如如果你想在PHP中生成PDF文件你會在手冊中發現兩個模塊PDF 和 ClibPDF但是這兩個都是有商業許可證的所以你所使用的每個模塊你都要確保你同意他的許可證

   不一致的函數命名規則

  有些函數名稱是有多個單詞組成的一般有三種單詞組合的習慣

  直接拼接getnumberoffiles
  用下劃線分開get_number_of_files
  駱駝法則getNumberOfFiles
  大部分語言選擇其中一中但是PHP都用到了

  例如你想要把一些特殊字符轉換成HTML實體你會使用函數htmlentities (直接拼接單詞)如果你要使用相反的功能你要用到它的小弟弟html_entity_decode由於某些特殊的原因這個函數名是由下劃線分隔單詞怎麼能這樣呢?你知道有一個函數叫strpad或者他是str_pad?每次你都要查看一下到底這個符號是什麼或者直接等他出現一個錯誤函數是不分大小寫的所以對於PHP來說rawurldecode 和RawUrlDecode之間沒有什麼區別這也很糟糕因為兩個都使用到了同時他們看上去還不一樣混淆了閱讀者

   魔法引用的地獄

  魔法引用(Magic quote)可以保護PHP腳本免受SQL注入攻擊這很好但是出於某些原因你可以在phpini中關閉這個配置所以你如果要寫出一個有彈性的腳本你總要檢查魔法引用是開啟還是關閉這樣一個特性應該讓編程更簡單而事實上變得更復雜了

   缺少標准框架

  一個成長中的網站沒有一個整體框架最終會變成維護的噩夢一個框架可以讓很多工作變得簡單現在最流行的框架模型時MVC模型在其中表現層業務邏輯和數據庫訪問都分離開了

  很多PHP網站不使用MVC模型他們甚至沒有一個框架甚至現在有一些PHP框架同時你都可以自己寫一個關於PHP的文章和手冊沒有提高框架的一個字同時JSP開發人員使用像Struts的框架ASP開發人員使用Net看起來好像這些概念都廣泛被PHP開發人員所了解這就說明了PHP實際上到底是多專業

  總結

  什麼問題?

  對於非常小的項目它可以是一個十分符合人意的編程語言但是對於較大的和更為復雜的項目PHP就顯出他的薄弱了當你不斷地摸索之後你會發現筆者提到的某些問題的解決方案所以當解決方案已知之後為什麼不能修正他呢?另外為什麼這些修補不在手冊中提到呢?

  一個開源的語言十分流行是一件好事但不幸得是它不是一個偉大的語言筆者希望所有的問題能有一天得到解決(也許在PHP?)然後我們就將擁有一個開源語言他既開源又好用

  到現在當你要啟動一個多於個腳本頁面的項目的時候你最好考慮C#/ASPNet 或者 Java/JSP或者也許Python同樣是一個更好的選擇


From:http://tw.wingwit.com/Article/program/PHP/201311/21478.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.