• php新手常见问题


    1.  不要在SELECT查询中使用 *  在表中返回所有的字段,这会非常的慢。你只需要取出你需要的数据字段。如果你需要取出所有的字段,那么可能你的表需要更改了。
     
    错误1:foreach循环后留下悬挂指针
    foreach循环中使用 引用 更改迭代的元素 这样可以提高效率,但是记得循环结束后销毁引用,否则$value是数组中最后一个元素的引用,如果下面有用到这个变量的时候会出错
    //例子:
    $arr = array(1, 2, 3, 4);
    foreach ($arr as &$value) {
    $value = $value * 2;
    }//now array(2,4,6,8)
     
    unset($value);  // $value no longer references $arr[3]
     
    错误2:对isset()函数行为的错误理解
    isset($var); //当变量为null或者不存在时,返回false,所以,要是检查数组中某键是否存在时, bool array_key_exists ( mixed$key , array $search ), array_key_exists() 在给定的 key 存在于数组中时返回 TRUEkey 可以是任何能作为数组索引的值。array_key_exists() 也可用于对象。
     
    错误5:内存使用低效和错觉
    一次sql查询获取多条记录比每次查询获取一条记录效率肯定要高,但如果你使用的是php中的mysql扩展,那么一次获取多条记录就很可能会导致内存溢出。
    为了避免此类问题,可以考虑分几次完成查询,减小单次查询数据量;
     
    错误6:忽略Unicode/UTF-8问题

    php编程中,在处理非ascii字符时,会遇到一些问题,要很小心的去对待,要不然就会错误遍地。

    举个简单的例子,strlen($name),如果$name包含非ascii字符,那结果就有些出乎意料。在此给出一些建议,尽量避免此类问题:

    • 如果你对unicode和utf-8不是很了解,那么你至少应该了解一些基础。推荐阅读这篇文章。

    • 最好使用mb_*函数来处理字符串,避免使用老的字符串处理函数。这里要确保PHP的“multibyte”扩展已开启。

    • 数据库和表最好使用unicode编码。

    • 知道jason_code()函数会转换非ascii字符,但serialize()函数不会。

    • php代码源文件最好使用不含bom的utf-8格式。

    错误7:假定$_POST总是包含POST数据
    // js
    $.ajax({
    url: 'http://my.site/some/path',
    method: 'post',
    data: JSON.stringify({a: 'a', b: 'b'}),
    contentType: 'application/json'
    });
     

    因为$_POST是全局变量,所以更改$_POST会全局有效。因此对于Content-Type为 application/json 的请求,我们需要手工去解析json数据,然后修改$_POST变量。

    // php
    $_POST = json_decode(file_get_contents('php://input'), true);

    此时,我们再去输出$_POST变量,则会得到我们期望的输出:

    array(2) { ["a"]=> string(1) "a" ["b"]=> string(1) "b" }
     
    错误8:认为PHP支持字符数据类型

    看看下面的代码,猜测下会输出什么:

    for ($c = 'a'; $c <= 'z'; $c++) {
    echo $c . " ";
    }

    如果你的回答是输出’a'到’z',那么你会惊奇的发现你的回答是错误的。

    不错,上面的代码的确会输出’a'到’z',但除此之外,还会输出’aa’到’yz’。我们来分析下为什么会是这样的结果。

     
    在PHP中不存在char数据类型,只有string类型。明白这点,那么对’z'进行递增操作,结果则为’aa’。对于字符串比较大小,学过C的应该都知道,’aa’是小于’z'的。这也就解释了为何会有上面的输出结果。
     
    如果我们想输出’a'到’z',下面的实现是一种不错的办法:
    $letters = range('a', 'z');
    for ($i = 0; $i < count($letters); $i++) {
    echo $letters[$i] . " ";
    }
     
    错误9:忽略编码标准

    对于PHP开发者来说,是比较幸运的。因为有PHP编码标准推荐(PSR),由下面5个部分组成:

    PSR-0:自动加载标准
    PSR-1:基本编码标准
    PSR-2:编码风格指南
    PSR-3:日志接口标准
    PSR-4:自动加载
     
    错误10:错误使用empty()函数
    检查一个数组是否为空最后的办法是用 count() 函数
  • 相关阅读:
    springboot设置Https请求
    mac OS 搭建PHP项目开发环境
    javascript SDK开发之webpack中eslint的配置
    Linux用户空间内存区域的匿名映射
    Ubuntu上架设PPPoE Server
    20060518: Alert!
    Unity3D的坑系列:打包Assetbundle丢失Shader问题(贴图显示不了)
    RequestDispatcher.forward() 方法和HttpServletResponse.sendRedirect()方法的区别
    类和对象、封装、继承、多态
    Linux命令(4):touch
  • 原文地址:https://www.cnblogs.com/lantian00/p/5297218.html
Copyright © 2020-2023  润新知