最火下载站首页
手机版
最火下载站
关注公众号
最火下载站

当前位置:首页 > 网络知识 > 网络编程 > PHP教程> 十大技巧提升你的 PHP 运用实力

十大技巧提升你的 PHP 运用实力

文章作者:网友投稿 发布时间:2008-12-10 来源:网络

烈火建站学院文档 在 Smashing Magazine 的网站,Glen Stansberry 提出十个进阶 PHP 技巧,可以即时提昇你的 PHP 编程实力,其中包括 SQL 注入攻击的「作弊表」、简化判断句中的 else 部分、在不得已的情况下才使用正规表达式、三元运算子、Memcached 数据库快取系统等等,以下是详细的内容。

PHP 在 1995 年从一个不起眼的编程语言开始,多年来迅速发展,现在已经是其中一种最流行的网络开发语言,许多热门网站均採用 PHP 来开发,绝大多数的程式和网站项目都是由这种流行语言写成。

由於 PHP 如此受欢迎,任何网站开发人员几乎都不能不认识 PHP,这份教程是為那些刚刚完成了 PHP 的学习初阶,捲起衣袖準备大干一番的人,下面列出的十个优秀技巧,是 PHP 开发人员必须学习,并在每次编程时使用它们,这些提示可以加快你们对 PHP 的熟练,使程式码跑得更快捷,更简洁,性能上更优化。

1. 使用 SQL 注入攻击作弊表

SQL 注入攻击是一种非常令人厌恶的东西,它是一种安全漏洞,允许黑客利用程式码中的漏洞潜入你的数据库。虽然本文与 MySQL 无关,不过许多 PHP 程式使用 MySQL 数据库,若果你要写安全的程式码,懂得什麼情况需要避开是很有用的。

Furruh Mavituna 写了一篇很有趣的 SQL 注入攻击作弊表,其中一章节有关 PHP 和 MySQL 的安全漏洞,若果你能避开其中所述的行為,你的程式将不容易受到攻击。

2. 认识各种比较运算符的分别

比较运算符是 PHP 很重要的部份,可惜很多程序员并不熟悉它们之间的分别,事实上,据一篇在 IO Reader 网站上发表的文章,许多 PHP 开发人员不能分辨 PHP 各种比较运算符之间的差异,引用该文的几句话:

这是极為重要的,但是很多 PHP 开发人员根本不知道 == 和 === 有什麼分别,从本质上讲,== 判断两个值是否相等,PHP 在进行比较前会尝试转换数据类型以,例如:1== '1' (true);=== 则同时判断值和数据类型,例如:1==='1'(false),开发人员必须儘快认识这些运算符对常用函式如 strpos() 的实用性,由於 PHP 把零视為「false」,没有 === 的话我们无从知道一个被搜寻字符串是在一个较长字符串的开始位置,还是根本不存在,在很多其他应用裡,当传回值為零未必等於 false 的时候,=== 便十分有用。

你可以到 PHP.net 网站看到各种比较运算符的清单。

3. 简化判断句中的 else 部分

必须提示各位,第三和第四点可能会使程式码的可读性降低,这两点强调速度和效能,若果你不想牺牲程式码的可读性,你可能要跳过它们。

凡是能使程式码更简单和更小的做法,通常都是好的做法,其中之一就是把 else 叙述句的内容抽出来,Christian Montoya 便有一个很好的例子,利用较短的 else 叙述句来转换字符。

常见的 else 叙述句:

以下为引用的内容:
if( this condition )
{
$x = 5;
}
else
{
$x = 10;
}

如果 $x 的预设值是 10,我们便从 10 开始,无须在 else 部分指定它的值。

虽然看起来没有很大分别,不过若果你的程式中有很多 else 叙述句,累加的效果会很明显。

4. 放弃那些括号


就像简化 else 叙述句那样,如果在控制结构后只有一句表达式,放弃表达式前后的括号可以节省一些字符。Evolt.org 便有一个灵巧的例子示范怎样减少使用括号。

以下为引用的内容:
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%。

6. 使用三元运算符

在使用 if / else 叙述句的场合,使用三元运算符,PHP Value 网站有一个使用三元运算符的范例:

以下为引用的内容:
//PHP COde Example usage for: Ternary Operator
$todo = (empty($_POST[’todo’])) ? ‘default’ : $_POST[’todo’];

// The above is identical to this if/else statement
if (empty($_POST[’todo’])) {
$action = ‘default’;
} else {
$action = $_POST[’todo’];
}
?>

三元运算符可以节省程式码的空间,使你的程式码没那麼混乱,也使其更容易阅读。但要注意,不要在同一句叙述句中使用超过一个三元运算符,因為在这种情况下 PHP 未必知道该怎麼办。

7. Memcached

虽然 PHP 有很多数据库快取工具,但是 Memcache 始终是效能最高的一个,虽然从实作的角度看它不是最简单方便,不过若果你要建立一个使用数据库的网站,Memcached 肯定可以為你的系统加速,Memcached 的快取架构最初是為一个以 PHP 為基础的网誌系统 LiveJournal 而建立的。

在 PHP.net 网站有一份安装和使用 Memcached 的教学文件。

8. 使用开发架构

你未必每一个开发项目都使用 PHP 开发架构,但开发架构如 CakePHP、Zend、Symfony、CodeIgniter 等无疑可以大大减少你建立一个网站的时间。开发架构是一个包含很多常用功能的软件,可以帮助加快开发工作,使用开发架构可以消除一些开发网页应用系统和网页服务的繁琐工作。

如果你可以利用开发架构来处理重复性的编程工作,你的开发进度将会大幅提高,写的程式码越少,所需的调试和除虫的工作便越少。

9. 正确使用压抑运算符

错误压抑运算符(在 PHP 手册中称為「错误控制运算符」)是指「@」符号,当它出现在一句 PHP 表达式前面,意思就是不论表达式发生任何错误都不要显示出来,这是非常方便的,尤其是当你不知道程式码什麼时候会发生错误,希望有关的错误讯息不会在用户面前出现。

然而,很多程序员经常错误地使用这个错误压抑运算符,「@」运算符相当缓慢,并且销耗颇多资源,对系统的效能有负面影响。Michel Fortin 有一些很好的例子示范如何用替代方法迴避「@」运算符,以下是他使用 isset 替代错误压抑运算符的范例:

以下为引用的内容:
if (isset($albus)) $albert = $albus;
else $albert = NULL;

相当于:

以下为引用的内容:
$albert = @$albus;

第二种形式虽然比较简单,但它的执行速度却比第一种慢两倍,一个更好的解决方法是透过参考来指定变量,不会引致任何错误讯息,像这样:

以下为引用的内容:
$albert =& $albus;

必须注意这些变化都有某些副作用,只能应用在有极高效能要求的场合中使用。

10. 使用 isset 捨弃 strlen

如果你要检查一个字符串是否过长,应该使用 isset 而不是 strlen,因為使用 isset 比 strlen 快五倍,还有,使用 isset 的话即使变量不存在你的表达式仍然是合法的,D-talk 有一个用 isset 替代 strlen 的详细说明,例如要检查字符串 $str 是否超过 9 个字符,使用 isset 的方法是:

以下为引用的内容:
if (isset($str[9])) echo "字符串的長度是 10 或以上"
else echo "字符串的長度小於 10"

虽然速度上这只是很小的改善,但加上前面涵盖的技巧,累加起来便可以有更快、更精简的程式。(编译/柳絮随风)

上一篇: PHP -time(),date(),mktime()日期与时间函数库

下一篇: 用php建立自己的网站内容管理系统CMS

共有0条评论网友评论

游戏排行榜