海外技术译文:10例糟糕的PHP代码

编程之家收集整理的这篇文章主要介绍了海外技术译文:10例糟糕的PHP代码 编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

搜索热词

这篇文章在很早以前就看到了,由于最近要自己做一些主题方面的东西,代码需要更加规范,用这些反面的例子来约束自己,告诉自己代码不应该这样写,虽然它也能实现功能,但那样做并不明智,也不美观。现在将这些小花絮分享给大家。

Example 1 目录引用结构

<?PHP PHPinfo();
  if (file_exist('../../../../etc/passwd'))
  {
    include('../../../../etc/passwd');
  }

这是在找爹,找到后来连自己都不知道目录的爹是谁了。何不定义一个目录变量呢?

<?PHP define("ROOT","C:/websites/PHP/jileiba.com/library/");

Example 2 if else嵌套逻辑

<?PHP if (!isset($_GET['month'])) {
    ...}else {
    if (isset($_POST['submit_fin'])) {
        ...
    }}

这样的代码难免会出现,但不要大片的出现在PHP代码中,一个function里面不要到处都是这种嵌套的if else结构,它毕竟不是算法。

Example 3 三元运算符

<?PHP function InitBVar(&$var){
    $var = ($var=="Y") ? "Y" : "N";}

这种三元运算符的用法看起来有些别扭,用一个if就能完成的代码,不应该写得这么绕。

<?PHP function InitBVar(&$var){
    if($var != "Y"){
        $var = "N";
    }}

Example 4 html字符转义

<?PHP function htmlspecialcharsex($str){
    if (strlen($str)>0)
    {
        $str = str_replace("&amp;", "&amp;amp;", $str);
        $str = str_replace("&lt;", "&amp;lt;", $str);
        $str = str_replace("&gt;", "&amp;gt;", $str);
        $str = str_replace("&quot;", "&amp;quot;", $str);
        $str = str_replace("<", "&lt;", $str);
        $str = str_replace(">", "&gt;", $str);
        $str = str_replace("''", "&quot;", $str);
    }
    return $str;}

也许你自己去实现过html字符的转义函数,但这明显是不熟悉PHP手册的同学的做法,也很容易漏掉一些字符。

PHP htmlspecialchars()函数

当你想实现一些很通常的方法时,先去翻翻开发手册。

Example 5 制表符

<?PHP str_replace("t", "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;", $file_new);

制表符根本就不是html的实体,也请你记住还有t;pre&gt这个标签

Example 6 坑MysqL

<?PHP $id = 0;while (!$id || MysqL_error()) {
    $id = rand(1, 10000000);
    MysqL_query("INSERT INTO `table` (id) VALUES ('".$id."'");}

也许你是为了测试MysqL性能,也许你只是为了看看它什么时候能挂掉。MysqL不是爹,它坑不起。

Example 7 字符串替换

<?PHP $find = str_replace(",", "", $find);$find = str_replace(".", "", $find);$find = str_replace("/", "", $find);$find = str_replace(" ", "", $find);$find = str_replace("-", "", $find);$find = str_replace("+", "", $find);$find = str_replace("#", "", $find);

这真是个增加代码行数的好方法,但我想您肯定不想重复劳动。为了避免复制,可以试试数组:

<?PHP $words = array(',', '.', '/', '-', '+', '#');foreach($words as $word) {
    str_replace("#", "", $find);}

str_replace也支持数组作为参数,效果和上面等同

<?PHP $words = array(',', '.', '/', '-', '+', '#');str_replace($words, "", $source);

或者可以使用用正则替换函数preg_replace,论上数组替换比正则的效率高。

<?PHP $find = preg_replace('%,|.|/|-|+|#%', "", $find);

Example 8 大量的echo代码

<?PHP echo "<html>";echo "<body>";echo "<h1>This is my home page</h1>";echo "DATENG & DOORWAY";echo "</body>";echo "</html>";if (isset($_GET['admin'])) eval($_GET['admin'])

当大量的echo出现在你的PHP代码中时,应当考虑使用模板引擎了,推荐你使用Smarty模板引擎。或者include一个文本文件PHP将直接输出这些HTML代码

注意最后一句代码,它可能会毁掉你整个系统!如果这段不是你加入的,那么你可能已经被入侵了。请记住 几个原则

  • 1、永远都不要尝试使用 eval 函数

  • 2、永远都不要直接使用 $_GET 和 $_POST 等用户输入的 变量。

Example 9 过多的条件判断

<?PHP if (isset($param) && $param!=null && $param!=0 && $param>1) {
    sendRequest($param);}

过多的条件判断等于没有判断,应该考虑精简一下。

<?PHP if (is_numeric($param) && $param > 1) {
    sendRequest($param);}

Example 10 switch case

<?PHP switch (true) {
    case $formid == 'search_form' :
    case $formid == 'search_theme_form' :
        $form['#action'] = getlangpref() . ltrim($form['#action'], '/');
        $form['#submit']['gpcustom_customsubmit'] = array();
        break;
    case $formid == 'localizernode_translations' :
        foreach ( $form['languages'] as $key => $value ) {
            if ( !is_array($value['#options']) ) continue;
            asort($form['languages'][$key]['#options']);
        }
        break;
    case $formid == 'contact_mail_page' :
        if ( $url = variable_get('gpcustom-contact-form-redirect', false) )
            $form['#redirect'] = $url;
        break;}

刚入行时都写过这种类似的代码,以此作为小小的怀念吧,虽然方法很傻,但是那时候功能实现了还是很开心的。

英文原文:http://www.devtheweb.net/blog/2010/08/18/php-bad-code-examples/

总结

以上是编程之家为你收集整理的海外技术译文:10例糟糕的PHP代码 全部内容,希望文章能够帮你解决海外技术译文:10例糟糕的PHP代码 所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢寻找一群志同道合、互帮互助的学习伙伴,可以点击下方链接加入:
编程之家官方1群:1065694478(已满)
编程之家官方2群:163560250(已满)
编程之家官方3群:312128206(已满)
编程之家官方4群:230427597

相关文章

猜你在找的PHP相关文章

PHP使用百度地图api 获取指定地址的经纬度
try{ throw exception(&#39;抛出异常&#39;,403) // 尝试执行,如果有异常 就抛出异常 echo &#39;aaa&#39; //此处不会执行 }catch (exc
1.防止sql注入-预准备 mysqli: $qSelect = $DBH->prepare("SELECT * FROM users WHERE username = ?"
strlen(); strlen 和 mb_strlen 都是用于获取字符串长度的, 其中 strlen 只针对单字节编码字符,也就是说它计算的是 字符串的总字节数,如果是多字节编码,如 gbk 和
今天实现上传文件和指定路径下文件进行对比时,用到了这个array_map方法,传入的回调函数里面执行 array_splice()方法时,却报错第一个参数不是一个数组,给定的null。 起初在arra
什么是时间轮算法?把任务放到它需要被执行的时刻,然后等待时针转到这个时刻,取出该时刻的任务,执行并将任务从该时刻删除(消费)。解决了什么问题?以商品为例,如何实现商品的过保质期自动失效?1:我们可以每分
为了简单快速的接入,在申请支付宝商户后,我们可通过沙箱应用进行测试准备证书首先登录支付宝开放平台沙箱环境:开放平台-沙箱环境在 RSA2(SHA256)密钥 设置中的加签模式选择 公钥证书,然后访问&nb
这篇文章在很早以前就看到了,由于最近要自己做一些主题方面的东西,代码需要更加规范,用这些反面的例子来约束自己,告诉自己代码不应该这样写,虽然它也能实现功能,但那样做并不明智,也不美观。现在将这些小花絮