我对这段代码的原则有问题,我无法解释。
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
这就是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;
}
据我所知:
==
只是一个通用的比较,所以如果你的键是一个整数,它会将字符串转换为一个整数来进行比较
该值由初始值给定字符串的一部分。如果字符串以有效的数字数据开头将是所使用的值。否则值将为0(零)。有效的数字data是一个可选符号,后面跟一个或多个数字(可选包含小数点),然后通过可选的指数。指数是"e"或"e",后跟一个或更多的数字。
===
是严格的评估,所以它也比较类型。
因此,当您执行"0 == '_identifier'
"时,它通过,因为它将'_identifier'
求值为0。当您执行"0 === '_identifier'
"时,它不会通过,因为它们是不同的类型。