我在SitePoint做面試官的時候一定會問的問題是:你認為PHP代碼的優劣體現在哪裡?因為這個問題可以讓我大體知道應聘者是哪種類型的程序員,而不是單純地考察他對PHP函數的掌握程度(這一點Zend的PHP認證做得不錯,雅虎的PHP程序員面試題也屬於此類)。重要的是,這個問題可以讓我知道應聘者是否經歷過這樣的事情——從一個懶散程序員手中接過一段凌亂的代碼進行重用,或者要幫助團隊中的其他成員來處理這類事情。
誠然,對於這個問題我自己也沒有一個滿意的答案,不過我知道哪些答案是我想聽到的:
優秀的PHP代碼應該是結構化的。大段的代碼應該被分割整理成一個個函數或方法,而那些不起眼的小段代碼則應該加上注釋,以便日後清楚它們的用途。而且應該盡可能地把前台代碼如HTML、CSS、Javascript等從程序中分離出來。PHP的面向對象編程特性可以很好地幫助程序員將代碼整理有序。
優秀的PHP代碼應該是規范化的。無論是為變量名和函數名設定命名規則,還是對一些會重復使用的過程如數據庫操作和錯誤處理進行標准化,抑或是簡單到規定好代碼是怎樣縮進的,這些規范化都可以讓代碼的可讀性大大提高。
優良的PHP代碼應該是自適應的。PHP有許多特性如magic quotes和short tags,這些特性的打開和關閉會影響到程序的運行。所以,一個好的程序員應該在他的代碼中加入適當的語句來使程序能夠根據環境進行調整。
優良的PHP代碼應該是安全的。雖然PHP是一種高效、靈活的語言,沒有固定的框架,但卻把安全問題留給了程序員們。對潛在安全漏洞的深刻理解,如跨站腳本攻擊(XSS)、跨站請求偽造(CSRF)、代碼注入漏洞、字符編碼循環漏洞等,對於今天的專業程序員來說是至關重要的。
當應聘者在回答這些問題的時候,我就能清楚地知道是否該錄用他。當然,有時程序員並不能很好地闡明這個問題,這時我們會讓他們做一些PHP測試。測試中的許多問題表面上看起來非常簡單,但這也給了應聘者們一個展現自我的機會,因為只要觀察得仔細,就能找出問題。
下面這一小段“劣質”的PHP代碼是一道簡化了的測試題。這種問題就像在問:你該怎樣優化這段代碼?