项目里面发现的问题,最简化后如下
$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
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
$arrB[0] = true;楼主,这样赋值是不对类内部的属性进行修改的,$equal = ($arrA == $arrB)的结果当然还是初始化的时候那个结果啊