不要再假裝 PHP 是一個好的程式語言

oschina發表於2013-10-23

  首先必須得申明的是你得承認確實有這麼個問題存在.

  帶著有這樣一個問題的心去讀本文.

 

 承認問題

  最近,就PHP語言的核心程式碼我偶發現兩種不同的爭論. 一部分人說 “我承認它語言本身不是很好,但是你看看,我們用php做了這麼多的網站!” 另一部分人是這麼認為 “看看我們使用php做的那些網站 - 這還敢說php這語言不好!”.

  他們的重點是在表達這麼多年來我們使用php做的網站都是很驚人的. 不一定網站富有很多技術含量,但是使用php給客戶做的網站數量那確實是可見的. 而真正支配PHP網站專案的不是它本身是一門好的程式語言,而是它讓開發者維護和建設了實用的網站. 你可能不會去挖掘 Wordpress, Drupal 或 phpBB,但是你想象下它們在過去的10年以來所被分享和相互合作的數量.

  所以的網站都使用一門程式語言這的確很容易做到,但是你有木有偶爾去想過這真的很讓人反感和厭惡的.

 不足之處

  試想去執行一個擁有 500萬行程式碼的應用,當嘗試呼叫這個方法的時候,但這個方法不存在的時候,該應用就會終止執行,這樣肯定是不行的。 

  那麼我這麼解釋吧: 讓使用者看到的是一個空白頁面,而且顯示的是並沒有堆疊路徑的錯誤(因為$user有時候在某些情況下是空),這是不行的. 對於一個執行在這可惡的網際網路上語言來說,這樣一個抉擇所帶來的巨大浪費和技術顯然是不足的.

  因為並不像1995那樣沒人關心你的留言板功能是否可用了. 即將到來的是2014了,你現在至少要做的是讓使用者可以看到一個比較爽眼有堆疊路徑的錯誤資訊,真誠地向使用者道歉說明情況,把堆疊路徑郵件給你的開發者. 至少有3個其他的網站指令碼語言不會這樣赤裸裸地丟擲空白頁面. 對於這種情是有原因的. “與專門語言一致”會給人們拋回一個反彈的問題,而這些人就會繼續花一些時間來尋找問題--只有去研究來自應用的那些堆疊路徑資訊.

  這些也是不足的地方.

  • 你不能對一個少於4行程式碼且不會帶來負面影響陣列很可靠地取出它的第一個元素來,這是不足的地方.*[1]
  • 在不知PHP配置的情況下,echo 5/3 的輸出結果還會收到國家地區的限制,這是不足的地方.
  • 2014年還不能在迭代程式中呼叫array_map或者是 “$iterator->reduce” ,這是不足的地方.
  • 忽略一個現象:目前大多數的phper都還是依靠有關對函式和類的註釋來理解的, 因為還不能收集郵件列表中的垃圾郵件,這是不足的地方.
  • 到處高呼道"對文字的輸入提示就意味著個給float型別傳了一個整形而導致PHP致命的錯誤",把$x = (float)$x;傳到一個並不恰當的地方還說是一個合理的引數,這是不足的地方.
  • 一種不能同時從兩個後臺終端互動資料,還假裝"承諾"什麼的語言,把 “獲取資料庫的資料然後輸出在網上”作為其公佈核心的資格,這是不足的地方.
  • 通過使用生成一些未定義的可變的錯誤僅能勉強使用token_get_all()來澄清錯誤緩衝,這是不足的地方
  • 在某種語言中使用echo 0.000001得到 1.0E-6 ,就宣稱number_format/sprintf對每個float型的資料不合適,這是不足的地方

  不管怎麼說,儘管你不得不用php來處理一些可能會產生沒有堆疊蹤跡的案例, 這些一點一點的缺陷是不能打破"php平臺"的.不過是該說說這些不可思議很神祕的缺陷,它們每天都在運轉,(換個角度說)是又不再有人去探索和證明它們.

  所以,請不要假裝"一切都很好,我不得不學php". 不,不,不是這樣的,還有很多不足之處等著修正了

 很好,另一個要高呼的是什麼呢?

  首要的事情不是給internals寫批判信抱怨什麼. 那樣會讓人感到很驚異的. 不管怎麼說,倒是很少有人贊助php的核心,也並不要擔心誰做了就是最好的開端,特別是像你們和我, 並沒有提供很規範的解決方案.

  要是你有足夠的耐心,而且對網際網路也瞭如指掌的人,要是這樣, 你就該寫一些RFCs來改善它,然後跟他們保聯絡,持保持一年或者更多時間都可以,直到都參與進來改善它. 雖然不是一個很好的系統,由於我們沒有得益於這個程式語言中的獨裁者,那麼做起來肯定要花費更長的時間了.

從目前的狀況來看,php也變得越來越具有負載性,並不是一個很好的選擇,所以這些都需要修正的. 第一步就是要承認的事實是:php核心本身真的存在問題,這些問題我們得注意,然後正對這些問題可以展開一些合理的論述. 不過就我所說的和據我所知的這些問題並不是技術上的問題. 這都是大家一致在討論php應該怎麼做,應該是什麼,就這樣漸漸的成了沒有人關注和不成文的論述了.

  而且緊緊說"php開源,修正下吧",這也不會解決任何問題的.你不可能通過說有很多問題但又假裝問題不存在而吸引人們去贊助某個專案. 在網路上是有一種方法,不用花費八年時間去修理一個破車就可以用相同數量的錢重獲一輛新的,可以直接開的車. Java的壯大跟 Coin 一樣修正小問題.

 現在知道php是有問題了. 不要再假裝沒有了.

 “php就是這樣一個了不起的高相容性語言,讓你做了不起的事” ,當全部的收益都用去處理一些不利的錯誤時,這個說法就不沒有說服力了.

你總不能讓程式碼和E_ERROR去呼叫一個沒有物件的類成員方法吧

  謝謝

  [1]: 是的,我知道$first = reset((array_values($list)));是可行的但是$first = reset(array_values($list));就不行了. 不知道你是不是想要告訴我這個怎麼解決,因為我覺得這個問題感覺有點像是屬於我們正在討論的問題. 我們在這裡不是來打高爾夫的. 

  [2]: 慶幸的是問題還沒有像那樣惡化下去,不過,“php是模板語言”作為爭論是否儲存其他不完善的功能也在四處散佈.

  原文地址:Please-stop-pretending-PHP-is-a-good-language

相關文章