Rumah > Artikel > pembangunan bahagian belakang > 十大技巧提升你的 PHP 运用实力_PHP教程
烈火建站学院文档 在 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 部分指定它的值。
<table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr><td style="WORD-WRAP: break-word" bgcolor="#fdfddf"><font color="#ff0000">以下为引用的内容:</font><br /><pre class="brush:php;toolbar:false">$x = 10;<br />if( this condition )<br />{<br />$x = 5;<br />}
<span><span class="google-src-text" style="DIRECTION: ltr; TEXT-ALIGN: left">if( this condition )</span>如果(这种情况)</span> <span><span class="google-src-text" style="DIRECTION: ltr; TEXT-ALIGN: left">{</span> (</span> <span><span class="google-src-text" style="DIRECTION: ltr; TEXT-ALIGN: left">$x = 5;</span> $ x = 5 ;</span> <span><span class="google-src-text" style="DIRECTION: ltr; TEXT-ALIGN: left">}</span> )</span> <span><span class="google-src-text" style="DIRECTION: ltr; TEXT-ALIGN: left">else</span>其他的</span> <span><span class="google-src-text" style="DIRECTION: ltr; TEXT-ALIGN: left">{</span> (</span> <span><span class="google-src-text" style="DIRECTION: ltr; TEXT-ALIGN: left">$x = 10;</span> $ x = 10 ;</span> <span><span class="google-src-text" style="DIRECTION: ltr; TEXT-ALIGN: left">}</span> )</span>
虽然看起来没有很大分别,不过若果你的程式中有很多 else 叙述句,累加的效果会很明显。
以下为引用的内容: if ($gollum == 'halfling') { $height --; } |
这是相同的:<br>
以下为引用的内容: if ($gollum == 'halfling') $height --; |
这个方法可以在程式中多次使用:<br><br>
以下为引用的内容: 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!'; |
以效率来说,str_replace() 比正规表达式更适合用来取代字符串,据一些研究,str_replace() 的效率比 ereg_replace() 和 preg_replace() 高 61%。
<span><span class="google-src-text" style="DIRECTION: ltr; TEXT-ALIGN: left">$x = 10;</span> $ x = 10 ;</span> <span><span class="google-src-text" style="DIRECTION: ltr; TEXT-ALIGN: left">if( this condition )</span>如果(这种情况)</span> <span><span class="google-src-text" style="DIRECTION: ltr; TEXT-ALIGN: left">{</span> (</span> <span><span class="google-src-text" style="DIRECTION: ltr; TEXT-ALIGN: left">$x = 5;</span> $ x = 5 ;</span> <span><span class="google-src-text" style="DIRECTION: ltr; TEXT-ALIGN: left">}</span> )</span>