PHP 7 - 比较匿名 Class 实例
PHP 7 - Comparing Anonymous Class Instances
我试过这个代码:
$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.
但是,当我声明一个 returns 匿名函数 class 时,结果如下:
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()
实例的结果都不同?
来自文档 http://php.net/manual/en/language.oop5.anonymous.php
All objects created by the same anonymous class declaration are instances of that very class.
<?php
function anonymous_class()
{
return new class {};
}
if (get_class(anonymous_class()) === get_class(anonymous_class())) {
echo 'same class';
} else {
echo 'different class';
}
The above example will output: same class
从 http://php.net/manual/en/language.oop5.object-comparison.php
When using the comparison operator ==
, object variables are compared in a simple manner, namely: Two object instances are equal if they have the same attributes and values (values are compared with ==), and are instances of the same class.
我试过这个代码:
$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.
但是,当我声明一个 returns 匿名函数 class 时,结果如下:
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()
实例的结果都不同?
来自文档 http://php.net/manual/en/language.oop5.anonymous.php
All objects created by the same anonymous class declaration are instances of that very class.
<?php
function anonymous_class()
{
return new class {};
}
if (get_class(anonymous_class()) === get_class(anonymous_class())) {
echo 'same class';
} else {
echo 'different class';
}
The above example will output: same class
从 http://php.net/manual/en/language.oop5.object-comparison.php
When using the comparison operator
==
, object variables are compared in a simple manner, namely: Two object instances are equal if they have the same attributes and values (values are compared with ==), and are instances of the same class.