首页 电脑 电脑学堂 查看内容

老外的建议:提高编程水平的十条PHP技巧

2009-1-4 10:00 920 0

摘要:     自1995年毫无知名度地诞生以来,PHP就一直快速地成长。自那以后,PHP已经成为Web应用中最流行的编程语言。许多流行的网站都是由PHP构建的,而且大多数的脚本...
关键词: pagebox 操作符 一个 height span replace 语句 PHP 代码 如果

    自1995年毫无知名度地诞生以来,PHP就一直快速地成长。自那以后,PHP已经成为Web应用中最流行的编程语言。许多流行的网站都是由PHP构建的,而且大多数的脚本和Web程序都是由这个流行语言编写的。   由于PHP的盛行,使网络开发者几乎不可能不懂一点的PHP知识。这个教程针对的是那些只是经历了PHP的初级阶段,并且准备卷起袖子,深入进去这个语言的人。下面列出的是PHP开发者应该学习并且在每次编程时使用的十条优秀的技术。这些经验能够加速开发者精通并且让代码更易被感知、更加整洁而且对代码执行来说更优化。   1.使用一个SQL注入攻击表(Use an SQL Injection Cheat Sheet) 图片11 一栏常用的SQL注入   SQL注入攻击是一种恶性的行为,SQL注入攻击是一个可以让黑客利用代码的弱点进入你的数据库的安全漏洞。虽然这篇文章不是Mysql相关的,但是很多PHP程序员都是用的Mysql数据库,所以如果你想写安全的代码的话学习如何避免(SQL注入)是很容易的。   Furruh Mavituna有一个很好的SQL injection cheat sheet,里面有一部分是关于PHP和Mysql编程的弱点的。如果你能避免这个cheat sheet指出的习惯,你的代码会变得更少的易于脚本攻击。   2.了解比较操作符之间的不同(Know the Difference Between Comparison Operators) 图片22 PHP的一栏比较操作符   比较操作符是PHP中巨大的一部分,而且很多程序员不能像他们应该的那样在它们之间的区别方面那么熟练。实际上,一篇在I/O reader的文章表明,很多PHP程序员不能正确的说出比较操作符之间的区别。   要明白,==代表着同等,===代表着一致。你可以看一篇在PHP.net网站上的list of the comparison operators 这篇文章。 3 .else语句简短话(Shortcut the else)   需要注意的是本文的第3条和第4条都有点让代码的可读性降低,这两条强调的是速度和执行。如果你选择不牺牲可读性,那么你可以略过这两条。   任何可以让代码更简单更小的事情通常都是一个好习惯。这条的目的是将“中间人”从else语句中拿出来,Christian Montoya有一个非常好的用短的else语句来减少字符的例子。   一般的else语句   if( this condition )   {   $x = 5;   }   else   {   $x = 10;   }   如果$x默认的是10,将它初始化为10就 可以了。没有必要再去麻烦的输入else部分。   $x = 10;   if( this condition )   {   $x = 5;   }   在代码的空间节省上好像没有太大的不同,如果在你的程序中有许多else语句的话,这样会明显的不同。   4.省略掉括号((Drop those Brackets) 图片33 去掉括号,为代码节省时间和空间   就像在写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(Favour str_replace() over ereg_replace() and preg_replace()) 图片44 速度测试显示str_replace()快61%   从效率的角度来看,在替换字符串方面 str_replace()比正则表达式更高效。实际上,根据Making the Web所说,str_replace()比像ereg_replace()和 preg_replace()这样的正则表达式效率要高61%。   如果你正在使用正则表达式的话,ereg_replace() 和preg_replace()会比str_replace()快很多。   6.使用三元操作符(Use Ternary Operators)   考虑使用三元操作符来代替完全使用 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 图片55 Memcached是结合PHP使用的非常棒的一个数据库缓存系统   虽然有很多缓存方案可供选择,Memcached做为最高效的数据库缓存名列前茅。它不是执行起来最简单的缓存系统,但是如果你用php搭建一个网站使用数据库的话,Memcached肯定能够加速你的网站。Memcached这个缓存系统第一次是为了LiveJournal这个blog网站而搭建的。   PHP.net有一个优秀的教程来介绍如何在你的项目中安装和使用memcached。 8.使用一个框架(Use a Framework) 图片66 CakePHP是顶尖的PHP框架之一   你可能不能在你的每个项目中使用PHP框架,但是像 CakePHP, Zend, Symfony and CodeIgniter这些框架可以大大的减少你构建一个网站的时间。框架是一个通过包装常用的机制来提高发展速度的软件。框架可以用来帮助减少开发网络应用程序和网络服务的开销。   如果在编写一个网站的时候你可以通过框架来打理反复的工作,你会更高速度的进行开发。写越少的代码,就会更少的进行调试和除错。   9.正确的使用抑制错误操作符(Use the Suppression Operator Correctly)   错误抑制操作符(或者在PHP手册中叫做错误控制符)是@这个符号,当在PHP中放在一个语句前面的时候,它只是简单的告诉程序不要(原文中此处为 now,估计为原作者笔误)显示这条语句产生的任何错误。如果你对这个值不确定或者不想抛出任何错误的话,这个操作符非常有用。   然而,很多程序员错误的使用错误抑制操作符。如果写代码时你把运行效率谨记在心的话,这个@操作符非常的慢而且运行代价很高。   Michel Fortin有一些例子来说明如何用其他方法来回避@这个错误抑制操作符。这是一个他使用isset这个函数 来替代错误印制操作符的方法。   if (isset($albus)) $albert = $albus;   else $albert = NULL;   等同于:   $albert = @$albus;   但是虽然第二种方法比较有条理的,但是运行速度要慢两倍左右。一个好的解决方法是通过引用来分配变量,这样不会触发任何警告,例如:   $albert = &$albus;   需要特别指出的是,这些改变可能会产生一些意外的副作用,应该用到对效率要求比较高的那些不会受到影响的地方。   10.使用isset代替strlen(Use isset instead of strlen) 图片77 使用isset你的调用会快五倍   如果你正在准备检查一个字符串的长度,用isset来代替strlen。通过使用isset,你的调用会快五倍。需要指出的是,通过使用isset,如果变量不存在的话,你的调用也会有效。   这只是一个小变化,但是像今天所讲到的这些技巧,加起来就会帮你成就快速,干净的代码。 .pb{} .pb textarea{font-size:14px; margin:10px; font-family:"宋体"; background:#FFFFEE; color:#000066} .pb_t{line-height:30px; font-size:14px; color:#000; text-align:center;} /* 分页 */ .pagebox{overflow:hidden; zoom:1; font-size:12px; font-family:"宋体",sans-serif;} .pagebox span{float:left; margin-right:2px; overflow:hidden; text-align:center; background:#fff;} .pagebox span a{display:block; overflow:hidden; zoom:1; _float:left;} .pagebox span.pagebox_pre_nolink{border:1px #ddd solid; width:53px; height:21px; line-height:21px; text-align:center; color:#999; cursor:default;} .pagebox span.pagebox_pre{color:#3568b9; height:23px;} .pagebox span.pagebox_pre a,.pagebox span.pagebox_pre a:visited,.pagebox span.pagebox_next a,.pagebox span.pagebox_next a:visited{border:1px #9aafe5 solid; color:#3568b9; text-decoration:none; text-align:center; width:53px; cursor:pointer; height:21px; line-height:21px;} .pagebox span.pagebox_pre a:hover,.pagebox span.pagebox_pre a:active,.pagebox span.pagebox_next a:hover,.pagebox span.pagebox_next a:active{color:#363636; border:1px #2e6ab1 solid;} .pagebox span.pagebox_num_nonce{padding:0 8px; height:23px; line-height:23px; color:#fff; cursor:default; background:#296cb3; font-weight:bold;} .pagebox span.pagebox_num{color:#3568b9; height:23px;} .pagebox span.pagebox_num a,.pagebox span.pagebox_num a:visited{border:1px #9aafe5 solid; color:#3568b9; text-decoration:none; padding:0 8px; cursor:pointer; height:21px; line-height:21px;} .pagebox span.pagebox_num a:hover,.pagebox span.pagebox_num a:active{border:1px #2e6ab1 solid;color:#363636;} .pagebox span.pagebox_num_ellipsis{color:#393733; width:22px; background:none; line-height:23px;} .pagebox span.pagebox_next_nolink{border:1px #ddd solid; width:53px; height:21px; line-height:21px; text-align:center; color:#999; cursor:default;}
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部