php开发中常见的错误

php开发中常见的错误

ID:8804050

大小:59.71 KB

页数:12页

时间:2018-04-08

php开发中常见的错误_第1页
php开发中常见的错误_第2页
php开发中常见的错误_第3页
php开发中常见的错误_第4页
php开发中常见的错误_第5页
资源描述:

《php开发中常见的错误》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、PHP开发中常见的错误PHP是一种非常流行的开源服务器端脚本语言,现在的大多数网站都是使用php开发的。以下小编将为大家介绍PHP开发中最常见的问题,希望能够对你有所帮助。错误1:foreach循环后留下悬挂指针在foreach循环中,如果我们需要更改迭代的元素或是为了提高效率,运用引用是一个好办法:$arr=array(1,2,3,4);foreach($arras&$value){  $value=$value*2;}//$arrisnowarray(2,4,6,8)这里有个问题很多人会迷糊。循环结束后,$value并未销毁,$value其实是数组中

2、最后一个元素的引用,这样在后续对$value的使用中,如果不知道这一点,会引发一些莫名奇妙的错误:)看看下面这段代码:$array=[1,2,3];echoimplode(',',$array),"";foreach($arrayas&$value){}  //byreferenceechoimplode(',',$array),"";foreach($arrayas$value){}  //byvalue(i.e.,copy)echoimplode(',',$array),"";上面代码的运行结果如下:1,2,31,2,31,2,2你答对了吗?你是不是在想为什

3、么是这个结果呢?我们来分析下。第一个循环过后,$value是数组中最后一个元素的引用。第二个循环开始:第一步:复制$arr[0]到$value(注意此时$value是$arr[2]的引用),这时数组变成[1,2,1]第二步:复制$arr[1]到$value,这时数组变成[1,2,2]第三步:复制$arr[2]到$value,这时数组变成[1,2,2]综上,最终结果就是1,2,2避免这种错误最好的办法就是在循环后立即用unset函数销毁变量:$arr=array(1,2,3,4);foreach($arras&$value){  $value=$value*2;}unset(

4、$value); //$valuenolongerreferences$arr[3]错误2:对isset()函数行为的错误理解对于isset()函数,变量不存在时会返回false,变量值为null时也会返回false。这种行为很容易把人弄迷糊,下面看代码:$data=fetchRecordFromStorage($storage,$identifier);if(!isset($data['keyShouldBeSet']){  //dosomethinghereif'keyShouldBeSet'isnotset}写这段代码的人本意可能是如果$data['keyShould

5、BeSet']未设置,则执行对应逻辑。但问题在于即使$data['keyShouldBeSet']已设置,但设置的值为null,还是会执行对应的逻辑,这就不符合代码的本意了。下面是另外一个例子:if($_POST['active']){  $postData=extractSomething($_POST);}//...if(!isset($postData)){  echo'postnotactive';}上面的代码假设$_POST['active']为真,那么$postData应该被设置,因此isset($postData)会返回true。反之,上面代码假设isset(

6、$postData)返回false的唯一途径就是$_POST['active']也返回false。真是这样吗?当然不是!即使$_POST['active']返回true,$postData也有可能被设置为null,这时isset($postData)就会返回false。这就不符合代码的本意了。如果上面代码的本意仅是检测$_POST['active']是否为真,下面这样实现会更好:if($_POST['active']){  $postData=extractSomething($_POST);}//...if($_POST['active']){  echo'postnot

7、active';}判断一个变量是否真正被设置(区分未设置和设置值为null),array_key_exists()函数或许更好。重构上面的第一个例子,如下:$data=fetchRecordFromStorage($storage,$identifier);if(!array_key_exists('keyShouldBeSet',$data)){  //dothisif'keyShouldBeSet'isn'tset}另外,结合get_defined_vars()函数,我们可以更加可靠的检测变量在当前作用域内是否

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。