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
存在于数组中时返回
TRUE
。
key
能够是任何能做为数组索引的值。
array_key_exists() 也可用于对象。
错误5:内存使用低效和错觉
一次sql查询获取多条记录比每次查询获取一条记录效率确定要高,但若是你使用的是php中的mysql扩展,那么一次获取多条记录就极可能会致使内存溢出。
为了不此类问题,能够考虑分几回完成查询,减少单次查询数据量;
错误6:忽略Unicode/UTF-8问题
php编程中,在处理非ascii字符时,会遇到一些问题,要很当心的去对待,要否则就会错误遍地。php
举个简单的例子,strlen($name),若是$name包含非ascii字符,那结果就有些出乎意料。在此给出一些建议,尽可能避免此类问题:mysql
-
若是你对unicode和utf-8不是很了解,那么你至少应该了解一些基础。推荐阅读这篇文章。c++
-
最好使用mb_*函数来处理字符串,避免使用老的字符串处理函数。这里要确保PHP的“multibyte”扩展已开启。ajax
-
数据库和表最好使用unicode编码。sql
-
知道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变量,则会获得咱们指望的输出:json
array(2) { ["a"]=> string(1) "a" ["b"]=> string(1) "b" }
错误8:认为PHP支持字符数据类型
看看下面的代码,猜想下会输出什么:数组
for ($c = 'a'; $c <= 'z'; $c++) {
echo $c . "\n";
}
若是你的回答是输出’a'到’z',那么你会惊奇的发现你的回答是错误的。app
不错,上面的代码的确会输出’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] . "\n";
}
错误9:忽略编码标准
对于PHP开发者来讲,是比较幸运的。由于有PHP编码标准推荐(PSR),由下面5个部分组成:
PSR-0:自动加载标准
PSR-1:基本编码标准
PSR-2:编码风格指南
PSR-3:日志接口标准
PSR-4:自动加载
错误10:错误使用empty()函数
检查一个数组是否为空最后的办法是用 count() 函数