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("<p>Search results for query: " .

$_GET['query'] . ".</p>");

?>

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

<?

echo("<p>Search results for query: " .

htmlspecialchars($_GET['query']) . ".</p>");

?>

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

<?php

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

{

echo '<p>Search results for query: ',

htmlspecialchars($_GET['query'], ENT_QUOTES), '.</p>';

}

?>

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

<?被替換成了<?php,這樣更符合XML規範。

在輸出$_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/

PHP代碼的優與劣
優良的PHP代碼應該是結構化的;優良的PHP代碼應該是規範化的;優良的PHP代碼應該是自適應的;優良的PHP代碼應該是安全的……  我在SitePoint做面試官的時候一定會問的問題是:你認爲PHP代碼的優劣體現在哪裏?因爲...查看完整版>>PHP代碼的優與劣
 
老站長淺談PHP代碼的優與劣
  優良的PHP代碼應該是結構化的;優良的PHP代碼應該是規範化的;優良的PHP代碼應該是自適應的;優良的PHP代碼應該是安全的……  我在SitePoint做面試.的時候一定會問的問題是:你認爲PHP代碼的優劣體現...查看完整版>>老站長淺談PHP代碼的優與劣
 
10條建議極大提高PHP代碼的性能-PHP語言
  這篇文章中的建議涵蓋了大部分PHP代碼性能方面的問題。如果你是做一些小網站或者小項目,那麽有理由忽略這些建議,但是當你爲大量用戶提供長期穩定的服務的時候,就必須關注了。開發人員必須從項目一開始就考慮這...查看完整版>>10條建議極大提高PHP代碼的性能-PHP語言
 
初學者學習PHP開發應該掌握的幾段精華代碼
經典循環例子<HTML><HEAD><TITLE>經典循環例子</TITLE></HEAD><BODY><? for($counter = 1; $counter <= 6; $counter++) //循環6次 { print("<B&g...查看完整版>>初學者學習PHP開發應該掌握的幾段精華代碼
 
PHP的語言層面的優化和代碼優化
大規模的系統開發中,Cache無疑是至關重要的,php世界裏,雖然不如java當中,有那麽豐富的cache解決方案可以選擇,但是,仍然有一些成熟的方案,從《advanced PHP programming》中我就學到了如下一些:1、語言層面的...查看完整版>>PHP的語言層面的優化和代碼優化
 
PHP 301轉向實現代碼
php對全站的所有內頁進行域名301轉向301轉向定義301轉向(或叫301重定向,301跳轉)是當用戶或搜索引擎向網站服務器發出浏覽請求時,服務器返回的HTTP數據流中頭信息(header)中的狀態碼的一種,表示本網頁永久性轉移到...查看完整版>>PHP 301轉向實現代碼
 
PHP獲取地址欄信息的代碼
<?php//獲取域名或主機地址echo $_SERVER['HTTP_HOST']."<br>";//獲取網頁地址echo $_SERVER['PHP_SELF']."<br>";//獲取網址參數echo $_SERVER["QUERY_STRING"]."<br>";//來源網頁的詳細地址ec...查看完整版>>PHP獲取地址欄信息的代碼
 
PHP base64+gzinflate壓縮編碼和解碼代碼
base64+gzinflate壓縮編碼(加密)過的文件通常是以 <? eval(gzinflate(base64_decode( 爲頭的一個php文件。文中給出了編碼和解碼的代碼。CODE:<?phpfunction encode_file_contents($filename) {$type=strtolo...查看完整版>>PHP base64+gzinflate壓縮編碼和解碼代碼
 
PHP集成FCK的函數代碼
定義一個函數用于調用FCKeditor ,用php寫成一個函數,方便調用CODE://定義一個函數用于調用FCKeditorfunction call_fck($input_name,$input_value,$w='780',$h='580'){include_once 'fckeditor/fckeditor.php';$fcke...查看完整版>>PHP集成FCK的函數代碼
 
 
回到王朝網路移動版首頁