PHP 7-比较匿名类实例

拉克斯·韦伯

我已经试过这段代码:

$ac1 = new class {};
$ac2 = new class {};

var_dump($ac1); // object(class@anonymous)#1 (0) {}
var_dump($ac2); // object(class@anonymous)#2 (0) {}
var_dump(new class {}); // object(class@anonymous)#3 (0) {}

var_dump($ac1 == $ac2); // bool(false)
var_dump($ac1 == new class {}); // bool(false)
var_dump($ac2 == new class {}); // bool(false)

以上比较的结果均为

但是,当我声明一个返回匿名类的函数时,结果如下:

function anonymous_class() {
    return new class {};
}

$ac1 = anonymous_class();
$ac2 = anonymous_class();

var_dump($ac1); // object(class@anonymous)#1 (0) {}
var_dump($ac2); // object(class@anonymous)#2 (0) {}
var_dump(anonymous_class()); // object(class@anonymous)#3 (0) {}

var_dump($ac1 == $ac2); // bool(true)
var_dump($ac1 == anonymous_class()); // bool(true)
var_dump($ac2 == anonymous_class()); // bool(true)

全部印成

现在的问题是,这是怎么发生的?特别是,在知道每个实例产生不同结果的情况,为什么它在第二种情况下显示为var_dump()

卢卡·雷恩(Luca Rainone)

从文档http://php.net/manual/en/language.oop5.anonymous.php

由相同的匿名类声明创建的所有对象都是该类的实例。

<?php
function anonymous_class()
{
    return new class {};
}

if (get_class(anonymous_class()) === get_class(anonymous_class())) {
    echo 'same class';
} else {
    echo 'different class';
}

上面的示例将输出:相同的类

并从http://php.net/manual/en/language.oop5.object-comparison.php

使用比较运算符时==,将以简单的方式比较对象变量,即:如果两个对象实例具有相同的属性和值(值与==进行比较)并且属于同一类的实例,则它们相等。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章