【发布时间】:2016-10-06 08:59:20
【问题描述】:
我试过这段代码:
$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)
以上比较的结果都是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)
全部打印true。
现在,问题是,这是怎么发生的?特别是,为什么它在第二个上下文中打印 true,知道每个 var_dump() 实例的结果都不同?
【问题讨论】:
-
作为一个快速而松散的答案:在您的第一个示例中,您有三个不同的“物理”
class声明,它们成为三个不同的类。在第二个示例中,您只有一个class,以及它的三个实例。 -
@deceze 你总结得很好。为什么不让它成为一个答案?
-
@chumkiu 已经做得很好了。
标签: php php-7 anonymous-class