我对这段代码的学说有问题我无法解释。
public function fromArray(array $array, $deep = true) {
$refresh = false;
foreach ($array as $key => $value) {
if ($key == '_identifier') {
$refresh = true;
$this->assignIdentifier($value);
continue;
}
我的键(整数)0将等于(字符串)'_ identifier'。这是PHP中的错误还是正常的?或者我做错了什么?
当我将代码更改为$key === '_identifier'
时,它可以正常工作。我有PHP版本5.3.4
答案 0 :(得分:5)
那是PHP:
echo (int) '_identifier'; // 0
0等于0.在比较操作中,字符串变为整数以进行比较。
使用===
进行相同类型的比较。称为相同,不相等:
public function fromArray(array $array, $deep = true) {
$refresh = false;
foreach ($array as $key => $value) {
if ($key === '_identifier') {
$refresh = true;
$this->assignIdentifier($value);
continue;
}
答案 1 :(得分:2)
据我所知:
==
只是通用比较,所以如果你的键是一个整数,它会将字符串转换为一个整数来比较它和from the manual:
该值由初始值给出 字符串的一部分。如果是字符串 从有效的数字数据开始,这个 将是使用的价值。否则, 值为0(零)。有效数字 数据是可选的符号,后跟 一个或多个数字(可选 包含小数点),紧随其后 通过可选的指数。指数 是一个'e'或'E'后跟一个或 更多数字。
===
是严格的评估,所以它也会比较类型。
因此,当您执行“0 == '_identifier'
”时,它会将'_identifier'
评估为0。
当你执行“0 === '_identifier'
”时,它不会传递,因为它们是不同的类型。