烈火建站學院文檔 在 Smashing Magazine 的網站,Glen Stansberry 提出十個進階 PHP 技巧,可以即時提昇你的 PHP 編程實力,其中包括 SQL 注入攻擊的「作弊表」、簡化判斷句中的 else 部分、在不得已的情況下才使用正規表達式、三元運算子、Memcached 數據庫快取系統等等,以下是詳細的內容。
PHP 在 1995 年從一個不起眼的編程語言開始,多年來迅速發展,現在已經是其中一種最流行的網絡開發語言,許多熱門網站均採用 PHP 來開發,絕大多數的程式和網站項目都是由這種流行語言寫成。
由於 PHP 如此受歡迎,任何網站開發人員幾乎都不能不認識 PHP,這份教程是為那些剛剛完成了 PHP 的學習初階,捲起衣袖準備大干一番的人,下面列出的十個優秀技巧,是 PHP 開發人員必須學習,並在每次編程時使用它們,這些提示可以加快你們對 PHP 的熟練,使程式碼跑得更快捷,更簡潔,性能上更優化。
SQL 注入攻擊是一種非常令人厭惡的東西,它是一種安全漏洞,允許黑客利用程式碼中的漏洞潛入你的數據庫。雖然本文與 MySQL 無關,不過許多 PHP 程式使用 MySQL 數據庫,若果你要寫安全的程式碼,懂得什麼情況需要避開是很有用的。
Furruh Mavituna 寫了一篇很有趣的 SQL 注入攻擊作弊表,其中一章節有關 PHP 和 MySQL 的安全漏洞,若果你能避開其中所述的行為,你的程式將不容易受到攻擊。
比較運算符是 PHP 很重要的部份,可惜很多程序員並不熟悉它們之間的分別,事實上,據一篇在 IO Reader 網站上發表的文章,許多 PHP 開發人員不能分辨 PHP 各種比較運算符之間的差異,引用該文的幾句話:
這是極為重要的,但是很多 PHP 開發人員根本不知道 == 和 === 有什麼分別,從本質上講,== 判斷兩個值是否相等,PHP 在進行比較前會嘗試轉換數據類型以,例如:1== '1' (true);=== 則同時判斷值和數據類型,例如:1==='1'(false),開發人員必須儘快認識這些運算符對常用函式如 strpos() 的實用性,由於 PHP 把零視為「false」,沒有 === 的話我們無從知道一個被搜尋字符串是在一個較長字符串的開始位置,還是根本不存在,在很多其他應用裡,當傳回值為零未必等於 false 的時候,=== 便十分有用。
你可以到 PHP.net 網站看到各種比較運算符的清單。
必須提示各位,第三和第四點可能會使程式碼的可讀性降低,這兩點強調速度和效能,若果你不想犧牲程式碼的可讀性,你可能要跳過它們。
凡是能使程式碼更簡單和更小的做法,通常都是好的做法,其中之一就是把 else 敘述句的內容抽出來,Christian Montoya 便有一個很好的例子,利用較短的 else 敘述句來轉換字符。
常見的 else 敘述句:
以下為引用的內容:
if( this condition )
{
$x = 5;
}
else
{
$x = 10;
}
如果 $x 的預設值是 10,我們便從 10 開始,無須在 else 部分指定它的值。
以下為引用的內容:$x = 10;
if( this condition )
{
$x = 5;
}if( this condition )如果(這種情況) { ( $x = 5; $ x = 5 ; } ) else其他的 { ( $x = 10; $ x = 10 ; } )
雖然看起來沒有很大分別,不過若果你的程式中有很多 else 敘述句,累加的效果會很明顯。
以下為引用的內容:
if ($gollum == 'halfling') {
$height --;
}
這是相同的:
以下為引用的內容:
if ($gollum == 'halfling') $height --;
這個方法可以在程式中多次使用:
以下為引用的內容:
if ($gollum == 'halfling') $height --;
else $height ++;
if ($frodo != 'dead')
echo 'Gosh darnit, roll again Sauron';
foreach ($kill as $count)
echo 'Legolas strikes again, that makes' . $count . 'for me!';
5. 取 str_replace(),捨 ereg_replace() 及 preg_replace()
以效率來說,str_replace() 比正規表達式更適合用來取代字符串,據一些研究,str_replace() 的效率比 ereg_replace() 和 preg_replace() 高 61%。
$x = 10; $ x = 10 ; if( this condition )如果(這種情況) { ( $x = 5; $ x = 5 ; } )