“ new”关键字如何与已经包含某个类的某些“对象”的“对象标识符”的“对象变量”一起使用?

时间:2019-01-06 08:44:43

标签: php class oop object new-operator

我正在使用 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()语句中实际比较了什么?

为什么比较的输出为真?

1 个答案:

答案 0 :(得分:4)

new $obj1将创建$obj1::class(即Test)的新实例。

var_dump()陈述中的比较是两个对象之间的严格比较。之所以返回true,是因为严格的比较正在检查这两个实例($obj1$obj2)没有引用同一类的同一实例。

如果比较不严格(例如$obj1 != $obj2),则将返回 false ,因为$obj1 == $obj2(例如,两者具有相同的属性和值,并且是相同的班级

在文档中this page上了解有关对象比较的更多信息。

您正在使用7.3几乎无关紧要。从5.3开始,您将获得相同的结果