為什么pHp不適合于比小型業(yè)余網(wǎng)站更大的網(wǎng)站

2023-11-17    分類: 網(wǎng)站建設(shè)

為什么用pHp開發(fā)大型系統(tǒng)感到不舒服?

來自:太平洋計(jì)算機(jī)網(wǎng)絡(luò)

在過去的四年中,作者一直致力于pHp應(yīng)用程序的開發(fā)。 pHp確實(shí)很容易編寫。但是pHp也有一些非常嚴(yán)重的缺陷。

以下作者將給出我自己的理由,為什么pHp不適合于比小型業(yè)余網(wǎng)站大的網(wǎng)站。

1.對遞歸的支持不佳

遞歸是一種函數(shù)調(diào)用自身的機(jī)制。這是一項(xiàng)強(qiáng)大的功能,可以使某些復(fù)雜的事情變得非常簡單。使用遞歸的一個(gè)示例是quicksort(quicksort)。不幸的是,pHp不擅長遞歸。 pHp開發(fā)人員Zeev說:“ pHp4.0(Zend)使用堆棧方法處理密集數(shù)據(jù),而不是使用堆方法。也就是說,與之相比,它可以容忍的遞歸函數(shù)數(shù)量有明顯的限制。其他語言。更少?!闭垍⒁婂e(cuò)誤1901。這是一個(gè)非常不好的借口。每種編程語言都應(yīng)提供良好的遞歸支持。

2.許多pHp模塊不是線程安全的

幾年前,Apache發(fā)布了Web服務(wù)器的2.版本0。該版本支持多線程模式,在這種模式下,軟件的一部分可以同時(shí)運(yùn)行多個(gè)。 pHp的發(fā)明者說,pHp的核心是線程安全的,但非核心模塊不是必需的。但是,十分之九,您想在pHp腳本中使用此模塊,但這使您的腳本不適用于Apache的多線程模式。這就是為什么pHp團(tuán)隊(duì)不建議在Apache 2的多線程模式下運(yùn)行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,這是一個(gè)免費(fèi)的加速器-翻譯器)

4.沒有命名空間

想象一下有人制作了一個(gè)pHp模塊來讀取文件。模塊中的功能稱為讀取。然后,另一個(gè)人的模塊可以讀取網(wǎng)頁,該網(wǎng)頁還包含讀取的功能。然后,我們不能同時(shí)使用這兩個(gè)模塊,因?yàn)閜Hp不知道您要使用哪個(gè)功能。

但是有一個(gè)非常簡單的解決方案,那就是名稱空間。曾經(jīng)有人建議將此功能添加到pHp5中,但不幸的是他沒有這樣做?,F(xiàn)在,沒有名稱空間,并且每個(gè)函數(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是免費(fèi)的,并且手冊中提到的所有pHp模塊也是免費(fèi)的。錯(cuò)誤!例如,如果您想用pHp生成pDF文件,您將在手冊中找到兩個(gè)模塊:pDF和ClibpDF。但是這兩個(gè)都有商業(yè)許可證。因此,對于您使用的每個(gè)模塊,必須確保您同意他的許可。

7.函數(shù)命名規(guī)則不一致

某些函數(shù)名稱由多個(gè)單詞組成。通常有三種詞組合:

直接拼接:getnumberoffiles

下劃線分隔:get_number_of_files

駱駝法則:getNumberOfFiles

大多數(shù)語言選擇其中一種。但是使用pHp。

例如,如果要將某些特殊字符轉(zhuǎn)換為HTML實(shí)體,則將使用htmlentities函數(shù)(直接拼接詞)。如果要使用相反的功能,則必須使用其小兄弟html_entity_decode。由于某些特殊原因,函數(shù)名稱由下劃線分隔。怎么會這樣?您知道有一個(gè)名為strpad的函數(shù)。還是他是str_pad?每次您必須檢查該符號是什么時(shí),或者等待他犯錯(cuò)。函數(shù)不區(qū)分大小寫,因此pHp的rawurldecode和RawUrlDecode之間沒有區(qū)別。這也很糟糕,因?yàn)閮烧叨急皇褂貌⑶彝庥^不同php開發(fā)是什么,這會使讀者感到困惑。

8.魔術(shù)引號的地獄

魔術(shù)引號可以保護(hù)pHp腳本免受SQL注入攻擊。很好但是由于某些原因,您可以在php.ini中關(guān)閉此配置。因此,如果要編寫靈活的腳本php開發(fā)是什么,則始終必須檢查魔術(shù)參考是打開還是關(guān)閉。這樣的“功能”應(yīng)該使編程更容易,但實(shí)際上它變得更加復(fù)雜。

9.缺乏標(biāo)準(zhǔn)框架

一個(gè)沒有整體框架的成長中的網(wǎng)站最終將成為維護(hù)的噩夢??蚣芸梢允购芏喙ぷ髯兊萌菀住W钍軞g迎的框架模型是MVC模型,其中表示層,業(yè)務(wù)邏輯和數(shù)據(jù)庫訪問均分開。

許多pHp網(wǎng)站都不使用MVC模型。他們甚至沒有框架。即使現(xiàn)在有一些pHp框架,您也可以自己編寫。有關(guān)pHp的文章和手冊并未改進(jìn)該框架。同時(shí),JSp開發(fā)人員使用Struts等框架,而ASp開發(fā)人員使用.Net。這些概念似乎已被pHp開發(fā)人員廣泛理解。這說明了pHp實(shí)際上是多么專業(yè)。

摘要

出什么問題了?

對于非常小的項(xiàng)目,它可能是一種非常令人滿意的編程語言。但是對于更大,更復(fù)雜的項(xiàng)目,pHp表現(xiàn)出了它的弱點(diǎn)。繼續(xù)探索之后,您將找到作者提到的一些問題的解決方案。因此,當(dāng)解決方案已知時(shí),為什么不能更正呢?另外,為什么手冊中未提及這些修復(fù)程序?

開源語言非常流行是一件好事。不幸的是,這不是一門好語言。作者希望所有問題都能在一天之內(nèi)解決(也許在pHp6中?),然后我們將擁有一種既開源又易于使用的開源語言。

到目前為止,當(dāng)您要啟動一個(gè)包含5個(gè)以上腳本頁面的項(xiàng)目時(shí),最好考慮使用C#/ ASp.Net或Java / JSp,或者也許python也是更好的選擇。

文章標(biāo)題:為什么pHp不適合于比小型業(yè)余網(wǎng)站更大的網(wǎng)站
文章出自:http://www.bm7419.com/news47/295047.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、Google網(wǎng)站設(shè)計(jì)、網(wǎng)站策劃、ChatGPT靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)