我正在使用 PHP 7.3.0
考虑以下PHP Manual中的代码:
<?php
class Test
{
static public function getNew()
{
return new static;
}
}
class Child extends Test
{}
$obj1 = new Test();
$obj2 = new $obj1;
var_dump($obj1 !== $obj2);
?>
以上代码的输出:
bool(true)
据我了解,对象变量$obj1
包含一个对象标识符,该标识符使对象访问者可以找到类Test
的实际对象。
然后,在将名为$obj1
的对象变量分配给变量new
时,如何用关键字$obj2
作为前缀?
对象变量$obj1
必须包含类Test
的对象的对象标识符。
使用new
关键字和已经包含一些对象标识符的对象变量可以实现什么目的?
var_dump()
语句中实际比较了什么?
为什么比较的输出为真?
答案 0 :(得分:4)
new $obj1
将创建$obj1::class
(即Test
)的新实例。
var_dump()
陈述中的比较是两个对象之间的严格比较。之所以返回true
,是因为严格的比较正在检查这两个实例($obj1
和$obj2
)没有引用同一类的同一实例。
如果比较不严格(例如$obj1 != $obj2
),则将返回 false ,因为$obj1 == $obj2
(例如,两者具有相同的属性和值,并且是相同的班级
在文档中this page上了解有关对象比较的更多信息。
您正在使用7.3几乎无关紧要。从5.3开始,您将获得相同的结果