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函式填補了,從而遮蔽了非法字元。
php
if (isset($_GET['query']))
{
echo '
Search results for query: ',
htmlspecialchars($_GET['query'], ENT_QUOTES), '.
}
?>
能寫出這樣程式碼的人應該是我想要錄用的人了。
<被替換成了 <php,這樣更符合XML規範。
在輸出$_GET['query']的值之前先判斷它是否為空。
echo命令中多餘的括號被去掉了。
字串用單引號限定,從而節省了PHP從字串中搜尋可替換的變數的時間。
用逗號代替句號,節省了echo的時間。
將ENT_QUOTES標識傳遞給htmlspecialchars函式,從而保證單引號也會被轉義。雖然這並是最主要的,但也算是一個良好習慣。
可惜的是,能給出這樣讓人滿意答覆的程式設計師少之又少。我們花了3個月的時間才招聘到讓我們滿意的程式設計師。
那麼,你會怎樣回答文章開頭提出的問題呢?你認為PHP程式碼的優劣體現在哪裡?你認為一個PHP程式設計師還應具有哪些品質?
原創文章如轉載,請註明:轉載自五四陳科學院[]
本文連結: /php-tech/php%e4%bb%a3%e7%a0%81%e7%9a%84%e4%bc%98%e4%b8%8e%e5%8a%a3.html
This entry was posted in php and tagged php. Bookmark the permalink.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2236/viewspace-2801433/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ClickHouse與ES的優劣對比
- 《96號公路》:程式生成敘事帶來的優與劣
- 主流程式語言的優勢與劣勢對比
- 微信小程式與APP區別與優劣勢介紹微信小程式APP
- XML 與 JSON 優劣對比XMLJSON
- PHP 程式碼優化技巧總結PHP優化
- 建立索引的優劣勢索引
- Python語言的優劣分析Python
- java、.net、php等語言開發商城系統優劣勢JavaPHP
- docker vm 效能優劣Docker
- 不吹不黑比對下React與Vue的差異與優劣ReactVue
- 易優執行php程式碼-EyouCms手冊PHP
- JavaScript建立閉包的兩種方式的優劣與區別分析JavaScript
- react-native技術的優劣React
- 吐槽各大題庫的優劣
- CRM系統的優劣是什麼?
- 程式碼智慧新基準資料集CodeXGLUE來襲,多角度衡量模型優劣模型
- CORS跨域與Nginx反向代理跨域優劣對比CORS跨域Nginx
- HLS與RTMP在直播場景下的優劣分析以及架構分析架構
- 「分散式技術專題」獨立儲存的優勢與劣勢分散式
- 在表格中基於樹的模型與深度學習優劣對比模型深度學習
- 定性與定量研究相結合,評估品牌/產品名稱的優劣
- JS 程式碼的簡單重構與優化JS優化
- 區塊鏈Dapp的劣勢和優勢區塊鏈APP
- 鐵電儲存器FRAM的優劣勢
- 優雅的程式碼
- 「分散式技術專題」非獨立儲存的優勢與劣勢分散式
- 什麼是PHP或PHP程式碼以及PHP程式設計的工作原理PHP程式設計
- PHP 程式碼安全PHP
- 如何讓git優雅的使用php-cs-fix格式化程式碼GitPHP
- 優劣解距離法Topsis模型模型
- 固態鐳射雷達優劣
- 網頁前端黑科技PWA的優劣對比網頁前端
- 全方位分析購物直播系統的優劣
- 怎樣看清香港伺服器的優劣?伺服器
- 正規表示式 vs. 字串處理:解析優勢與劣勢字串
- epic和steam的區別介紹及優劣對比 epic與steam互通嗎
- 利用 PHP7 的 OPcache 執行 PHP 程式碼PHPopcache