来自Array错误的条令


Doctrine fromArray bug?

我对这段代码的原则有问题,我无法解释。

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'"时,它不会通过,因为它们是不同的类型。