PHP5.3 的正式發(fā)布,又重新關(guān)注起其語言本身。細心的朋友可能發(fā)現(xiàn),PHP5.3 增加了 goto 語句,這在結(jié)構(gòu)化語言今天似乎是有點不可思議的事情。
按照官方的說法,其實這和我們傳統(tǒng)理解的 goto 還是有所差別。PHP 5.3 中的 goto 語句只能在腳本文件以及上下文中跳轉(zhuǎn),因此它無法從某函數(shù)或方法跳到其他的函數(shù)或者方法 -- 這不得不讓我懷疑是否是“妥協(xié)”的結(jié)果。
看來 PHP 語言的設(shè)計者對 goto 語句應(yīng)用是方便從從多重循環(huán)體中跳出(在其文檔中的例子也說明了這點)。但其實這功能的本身也引發(fā)了不少的爭議,個人也隱約的聞到了潘多拉身上的香水味。
其實“好事者”早在 2007 年就開始“期待”這項“新功能”,相信他現(xiàn)在會很開心。不過有趣的是這篇文章的留言給原作者潑了盆冷水。的確,goto 語句所能完成的功能,其實善用 switch 也能做到,而且更有可讀性。
不過不管怎么樣,語言本身僅僅是工具而已。從程序的本身角度考慮(不僅僅是 PHP),如果有過多的循環(huán)等的語塊嵌套,那就說明這段代碼必須需要優(yōu)化了。到底應(yīng)不應(yīng)該使用 goto 語句,其實本人和其他的 PHP 人員也有過討論。
最終,大家較為統(tǒng)一的觀點就是,避免使用。
“PHP 的 10 宗罪”
老外較起真來真的非常讓人受不了,這不又有好事者總結(jié)了 PHP 語言本身語法的 “10 宗罪”。其實,我個人這與其稱為“Mistake”,還說是 PHP 提供的“美麗的陷阱”。
例如,文中提到的有關(guān)單引號和雙引號的變量轉(zhuǎn)義問題。其實這一爭論的聲音從學(xué) PHP 起就在耳畔充斥。甚至記得當(dāng)年還有道經(jīng)典的面試題,就是考單引號和雙引號的的速度孰快 -- 回過頭來看,這論點就猶如此道面試題一樣,是沒有任何的意義的。
但這不代表文中的些“Mistake”都可以當(dāng)作笑談,有些是的確需要注意的。例如
以下為引用的內(nèi)容:
$i = 0;
while($i < 20); {
//some code here
$i++;
}
這樣的寫法。對應(yīng)的其實還有 for 語句,我們可能“手殘”多寫了個分號(不要不承認),那么就只能祈禱 set_time_limit 的數(shù)字小些了。
文中指出的其他些問題,也是我們需要納入思考的范圍中,例如數(shù)據(jù)庫存取的緩存問題。為何 PHP 為何至今沒有數(shù)據(jù)池這樣的概念,其實這需要從 PHP 這門語言本身的設(shè)計哲學(xué)出發(fā)了。從此問題其實可以引申爭為何 PHP 沒有走向 Java 的套路,好吧這問題又可以爭論一番了。
文中還有其他類似的條目,都非常的具有爭議(也許搞不好這就是作者的初衷),但無論怎么說,其提出的幾個問題都是值得我們?nèi)ニ伎嫉摹?/P>
深夜雜談隨想,亂語之處眾位見笑了,歡迎發(fā)表您的看法
如對本文有疑問,請?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會為你解答!! 點擊進入論壇