PHP代碼的優與劣

來源:互聯網
上載者:User
關鍵字 PHP代碼的優與劣

優良的php代碼應該是結構化的;優良的PHP代碼應該是正常化的;優良的PHP代碼應該是自適應的;優良的PHP代碼應該是安全的……

我在SitePoint做面試官的時候一定會問的問題是:你認為PHP代碼的優劣體現在哪裡?因為這個問題可以讓我大體知道應聘者是哪種類型的程式員,而不是單純地考察他對PHP函數的掌握程度(這一點Zend的PHP認證做得不錯,雅虎的PHP程式員面試題也屬於此類)。

重要的是,這個問題可以讓我知道應聘者是否經曆過這樣的事情——從一個懶散程式員手中接過一段淩亂的代碼進行重用,或者要協助團隊中的其他成員來處理這類事情。

誠然,對於這個問題我自己並沒有一個滿意的答案,不過我知道哪些答案是我想聽到的:

優良的PHP代碼應該是結構化的。大段的代碼應該被分割整理成一個個函數或方法,而那些不氣眼的小段代碼則應該加上注釋,以便日後清楚它們的用途。而且應該儘可能地把前台代碼如HTML、CSS、javascript等從程式中分離出來。PHP的物件導向編程特性可以很好地協助程式員將代碼整理有序。

優良的PHP代碼應該是正常化的。無論是為變數名和函數名設定命名規則,還是對一些會重複使用的過程如資料庫操作和錯誤處理進行標準化,抑或是簡單到規定好代碼是怎樣縮排的,這些正常化都可以讓代碼的可讀性大大提高。

優良的PHP代碼應該是自適應的。PHP有許多特性如magic quotes和short tags,這些特性的開啟和關閉會影響到程式的運行。所以,一個好的程式員應該在他的代碼中加如適當的語句來使程式能夠根據環境進行調整。

優良的PHP代碼應該是安全的。雖然PHP是一種高效、靈活的語言,沒有固定的架構,但卻把安全問題留給了程式員們。對潛在安全性漏洞的深刻理解,如跨站指令碼攻擊(XSS)、跨站請求偽造(CSRF)、代碼注入漏洞、字元編碼迴圈漏洞等,對於今天的專業程式員來說是至關重要的。

當應聘者在回答這些問題的時候,我就能清楚地知道是否該錄用他。當然,有時程式員並不能很好地闡明這個問題,這時我們會讓他們做一些PHP測試。測試中的許多問題表面上看起來非常簡單,但這也給了應聘者們一個展現自我的機會,因為只要觀察得仔細,就能找出問題。

下面這一小段“劣質”的PHP代碼是一道簡化了的測試題。這種問題就像在問:你該怎樣最佳化這段代碼?

echo("

Search results for query: " .
  $_GET['query'] . ".

");
?>

這段代碼的主要問題在於它把使用者提交的資料直接顯示到了網頁上,從而產生XSS漏洞。其實有很多方法可以填補這個漏洞。那麼,什麼代碼是我們想要的呢?

echo("

Search results for query: " .
  htmlspecialchars($_GET['query']) . ".

");
?>

這是最低要求。XSS漏洞用htmlspecialchars函數填補了,從而屏蔽了非法字元。

if (isset($_GET['query']))
{
echo '

Search results for query: ',
   htmlspecialchars($_GET['query'], ENT_QUOTES), '.

';
}
?>

能寫出這樣代碼的人應該是我想要錄用的人了。

在輸出$_GET['query']的值之前先判斷它是否為空白。
echo命令中多餘的括弧被去掉了。
字串用單引號限定,從而節省了PHP從字串中搜尋可替換的變數的時間。
用逗號代替句號,節省了echo的時間。
將ENT_QUOTES標識傳遞給htmlspecialchars函數,從而保證單引號也會被轉義。雖然這並是最主要的,但也算是一個良好習慣。
  可惜的是,能給出這樣讓人滿意回覆的程式員少之又少。我們花了3個月的時間才招聘到讓我們滿意的程式員。

那麼,你會怎樣回答文章開頭提出的問題呢?你認為PHP代碼的優劣體現在哪裡?你認為一個PHP程式員還應具有哪些品質?

本文出自:http://www.yeeyan.com/articles/view/38585/18736
原文連結:http://www.sitepoint.com/blogs/2007/05/25/good-and-bad-php-code/

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.