2023-11-17 分類: 網(wǎng)站建設(shè)
為什么用pHp開發(fā)大型系統(tǒng)感到不舒服?
來自:太平洋計算機網(wǎng)絡(luò)
在過去的四年中,作者一直致力于pHp應(yīng)用程序的開發(fā)。 pHp確實很容易編寫。但是pHp也有一些非常嚴(yán)重的缺陷。
以下作者將給出我自己的理由,為什么pHp不適合于比小型業(yè)余網(wǎng)站大的網(wǎng)站。
1.對遞歸的支持不佳
遞歸是一種函數(shù)調(diào)用自身的機制。這是一項強大的功能,可以使某些復(fù)雜的事情變得非常簡單。使用遞歸的一個示例是quicksort(quicksort)。不幸的是,pHp不擅長遞歸。 pHp開發(fā)人員Zeev說:“ pHp4.0(Zend)使用堆棧方法處理密集數(shù)據(jù),而不是使用堆方法。也就是說,與之相比,它可以容忍的遞歸函數(shù)數(shù)量有明顯的限制。其他語言。更少。”請參見錯誤1901。這是一個非常不好的借口。每種編程語言都應(yīng)提供良好的遞歸支持。
2.許多pHp模塊不是線程安全的
幾年前,Apache發(fā)布了Web服務(wù)器的2.版本0。該版本支持多線程模式,在這種模式下,軟件的一部分可以同時運行多個。 pHp的發(fā)明者說,pHp的核心是線程安全的,但非核心模塊不是必需的。但是,十分之九,您想在pHp腳本中使用此模塊,但這使您的腳本不適用于Apache的多線程模式。這就是為什么pHp團隊不建議在Apache 2的多線程模式下運行pHp的原因。糟糕的多線程模式支持使pHp經(jīng)常被認(rèn)為是Apache 2仍然不受歡迎的原因之一。
請閱讀以下討論:Slashdot:網(wǎng)站拒絕Apache 2嗎?。
3.由于商業(yè)原因,pHp不健全
通過使用緩存,pHp的性能可以顯著提高500%[請參閱基準(zhǔn)測試]。那么為什么緩存沒有內(nèi)置在pHp中呢?由于pHp的制造商Zend正在出售自己的Zend Accelerator,因此,他們當(dāng)然不想放棄他們的商業(yè)產(chǎn)品。
但是還有另一種選擇:ApC。 (Zend后來推出了Zend Optimizer,這是一個免費的加速器-翻譯器)
4.沒有命名空間
想象一下有人制作了一個pHp模塊來讀取文件。模塊中的功能稱為讀取。然后,另一個人的模塊可以讀取網(wǎng)頁,該網(wǎng)頁還包含讀取的功能。然后,我們不能同時使用這兩個模塊,因為pHp不知道您要使用哪個功能。
但是有一個非常簡單的解決方案,那就是名稱空間。曾經(jīng)有人建議將此功能添加到pHp5中,但不幸的是他沒有這樣做?,F(xiàn)在,沒有名稱空間,并且每個函數(shù)都必須以模塊名稱作為前綴,以避免名稱沖突。這使函數(shù)名稱非常長,例如,xsl_xsltprocessor_transform_to_xml使得代碼難以編寫和理解。
5.非標(biāo)準(zhǔn)日期格式字符
許多程序員熟悉從UNIX和C語言派生的日期格式字符。其他一些編程語言也采用了此標(biāo)準(zhǔn),但奇怪的是,pHp具有自己的一組完全不兼容的日期格式字符。在C中,“%j”表示一年中的某天,而在pHp中,其表示每月中的某天。但是,要使情況更加混亂:Smarty(一種流行的pHp模板引擎)的strftime函數(shù)和date_format函數(shù)使用C / UNIX格式字符。
6.許可證混亂
您可能會認(rèn)為pHp是免費的,并且手冊中提到的所有pHp模塊也是免費的。錯誤!例如,如果您想用pHp生成pDF文件,您將在手冊中找到兩個模塊:pDF和ClibpDF。但是這兩個都有商業(yè)許可證。因此,對于您使用的每個模塊,必須確保您同意他的許可。
7.函數(shù)命名規(guī)則不一致
某些函數(shù)名稱由多個單詞組成。通常有三種詞組合:
直接拼接:getnumberoffiles
下劃線分隔:get_number_of_files
駱駝法則:getNumberOfFiles
大多數(shù)語言選擇其中一種。但是使用pHp。
例如,如果要將某些特殊字符轉(zhuǎn)換為HTML實體,則將使用htmlentities函數(shù)(直接拼接詞)。如果要使用相反的功能,則必須使用其小兄弟html_entity_decode。由于某些特殊原因,函數(shù)名稱由下劃線分隔。怎么會這樣?您知道有一個名為strpad的函數(shù)。還是他是str_pad?每次您必須檢查該符號是什么時,或者等待他犯錯。函數(shù)不區(qū)分大小寫,因此pHp的rawurldecode和RawUrlDecode之間沒有區(qū)別。這也很糟糕,因為兩者都被使用并且外觀不同php開發(fā)是什么,這會使讀者感到困惑。
8.魔術(shù)引號的地獄
魔術(shù)引號可以保護pHp腳本免受SQL注入攻擊。很好但是由于某些原因,您可以在php.ini中關(guān)閉此配置。因此,如果要編寫靈活的腳本php開發(fā)是什么,則始終必須檢查魔術(shù)參考是打開還是關(guān)閉。這樣的“功能”應(yīng)該使編程更容易,但實際上它變得更加復(fù)雜。
9.缺乏標(biāo)準(zhǔn)框架
一個沒有整體框架的成長中的網(wǎng)站最終將成為維護的噩夢??蚣芸梢允购芏喙ぷ髯兊萌菀?。最受歡迎的框架模型是MVC模型,其中表示層,業(yè)務(wù)邏輯和數(shù)據(jù)庫訪問均分開。
許多pHp網(wǎng)站都不使用MVC模型。他們甚至沒有框架。即使現(xiàn)在有一些pHp框架,您也可以自己編寫。有關(guān)pHp的文章和手冊并未改進該框架。同時,JSp開發(fā)人員使用Struts等框架,而ASp開發(fā)人員使用.Net。這些概念似乎已被pHp開發(fā)人員廣泛理解。這說明了pHp實際上是多么專業(yè)。
摘要
出什么問題了?
對于非常小的項目,它可能是一種非常令人滿意的編程語言。但是對于更大,更復(fù)雜的項目,pHp表現(xiàn)出了它的弱點。繼續(xù)探索之后,您將找到作者提到的一些問題的解決方案。因此,當(dāng)解決方案已知時,為什么不能更正呢?另外,為什么手冊中未提及這些修復(fù)程序?
開源語言非常流行是一件好事。不幸的是,這不是一門好語言。作者希望所有問題都能在一天之內(nèi)解決(也許在pHp6中?),然后我們將擁有一種既開源又易于使用的開源語言。
到目前為止,當(dāng)您要啟動一個包含5個以上腳本頁面的項目時,最好考慮使用C#/ ASp.Net或Java / JSp,或者也許python也是更好的選擇。
文章標(biāo)題:為什么pHp不適合于比小型業(yè)余網(wǎng)站更大的網(wǎng)站
文章出自:http://www.rwnh.cn/news47/295047.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機網(wǎng)站建設(shè)、Google、網(wǎng)站設(shè)計、網(wǎng)站策劃、ChatGPT、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容