過去的幾周對我來說是一段相當復雜的經歷。我們公司進行了大裁員,我是其中之一,但卻體驗到了其中的樂趣。我從來沒有被開除過,所以很難不去想得太多。我開始浏覽招聘板塊,一個全職PHP程序員的職位很吸引人,所以我寄去了簡歷並獲得了面試機會。在面試之間,我和其主要的程序員們在咨詢電話中聊了聊,最後他們給我出了一套測試題,其中有一道很耐人尋味。
找出以下代碼的錯誤之處:
<?function baz($y $z) { $x = new Array(); $x[sales] = 60; $x[profit] = 20: foreach($x as $key = $value) { echo $key+" "+$value+"<BR>"; } }
你能找到幾個呢?
如果你發現函數參數列表中少了逗號、“new Array()”是不正確的、行末用了冒號而不是分號、foreach中沒有用“=>”及用“+”來連接字符串,那恭喜你,你找到了所有的錯誤,你已經掌握了PHP編程的基礎。
現在我來說說我是怎麼回答這道題的。我當然也找出了以上這些問題,但我更進一步。比如,你有沒有發現在數組索引裡沒有用引號將字符串括起來?雖然這不會造成嚴重錯誤,但這是一個編碼錯誤。另外,你注意到在echo一行它使用了雙引號而不是單引號嗎?使用了PHP開始標志的縮寫形式?並且沒有用 “<br/>”而是用了“<BR>”?
在找出了實際錯誤後,我又在上面找到的問題後面加了注釋。這足夠讓這份答卷從“正確”轉變為“發人深省”了,這也給我的申請加了不少分,所以他們決定聘用我。(但最後我拒絕了,因為我喜歡緊湊的生活節奏,並將自己的PHP 技能奉獻給我的客戶,而不是一家涉獵電信市場的公司。我需要一個舞台來大展身手。)
那麼接下來就來看看我寫的10條PHP編程習慣吧:
1、使用單引號括起來的字符串
當使用雙引號來括字符串時,PHP解釋器會對其進行變量替換、轉義等操作,如“ ”。如果你只想輸出一個基本的字符串,就用單引號吧,這樣會節省一些資源。當然,如果你需要進行變量替換的,那就必須用雙引號了,但其他情況下還是用單引號吧。
2、字符串的輸出
你認為以下哪一條語句的運行速度最快?
print "Hi my name is $a. I am $b"; echo "Hi my name is $a. I am $b"; echo "Hi my name is ".$a.". I am ".$b; echo "Hi my name is ",$a,". I am ",$b; echo 'Hi my name is ',$a,'. I am ',$b;
也許這看起來很奇怪,但事實上最後一條的運行速度是最快的。print比echo要慢,在字符串中進行變量替換時會慢,而連接字符串要比用逗號連接來得慢,最後一句則是第一個習慣的體現。所以,不在字符串中進行變量替換不僅會加快程序運行速度,也會讓你的代碼在任何語法高亮顯示的編輯器中顯得更為易懂(變量會被高亮顯示出來)。很少人知道echo的參數可以用逗號連接,且速度會比字符串連接要來得快。最後再用上第一個習慣,那這條語句就非常好了。
3、在數組索引中使用單引號
正如你在上面的測試題中所看到的,我指出了$x[sales]從嚴格意義上來說是錯誤的,索引應該被括起來,即$x['sales'].這是因為PHP 會將沒有括起來的索引辨認為“裸”字符串,並把它解釋為一個常量。當找不到該常量的定義時,才將其解釋為一個字符串,所以這條語句才是可運行的。把索引括起來可以省去這部分工作,如果將來正好要用這一字符串定義常量時也就不會有錯誤了。我甚至聽說這樣做要快七倍左右的時間,雖然我沒有親自測試過。更多關於這一話題的討論,請看PHP手冊“數組”一章中的的“數組的能與不能”一節。
4、不要使用開始標志的縮寫形式
你正在使用這樣的符號嗎?“<?”是非常糟糕的符號,它會引起與XML解釋器的沖突。而且一旦你發布了這些代碼,那麼使用者就必須修改php.ini文件來打開對此符號的支持。所以實在沒有理由去使用這種形式。用“<?php”吧。