php - 一段仅当使用调试类函数才能正常运行的小代码,有人能解释下吗?
PHP中文网
PHP中文网 2017-04-11 09:05:53
[PHP讨论组]

项目里面发现的问题,最简化后如下

$arrA=$arrB=[true,false,true];
$arrA=SplFixedArray ::fromArray($arrA);
$arrB=SplFixedArray ::fromArray($arrB);
var_dump($arrA);
echo '
'; var_dump($arrB); $arrB[2]=false; echo '
'; //使用下面任意语句或者使用xdebug单步执行尝试调试都能获得$equal===false,否则为$equal===true //var_dump($arrB); //print_r($arrB); //json_encode($arrB); //var_export($arrB); echo '
'; $equal=($arrA==$arrB); var_dump($equal);

显而易见的$arrB与$arrA是属性是不完全一致的,
所以==的值理应是预期值false,但实际上最终的结果却是true
我尝试去定位这个问题,但是当我尝试使用调试函数如var_export()后,我又得到了预期值false,同样的xdebug单步运行后同样是得到的预期值false
所以这是为什么呢?
运行环境PHP5.7,PHP7.04

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(1)
黄舟

$arrB[0] = true;楼主,这样赋值是不对类内部的属性进行修改的,$equal = ($arrA == $arrB)的结果当然还是初始化的时候那个结果啊

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号