代码之家  ›  专栏  ›  技术社区  ›  PHPFan

“new”关键字如何与“object variable”一起使用,该“object variable”已包含某个类的某个已存在“object”的“object identifier”?

  •  0
  • PHPFan  · 技术社区  · 7 年前

    从下面考虑代码 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 .

    那么,这个对象变量是如何命名的呢 已以关键字作为前缀 new 当它被分配给变量时 $obj2 ?

    对象变量 $obj1 必须包含类的对象的对象标识符 .

    通过使用 刚出现的 已包含某些对象标识符的对象变量的关键字?

    在这个例子中,究竟比较了什么 var_dump() 陈述

    我正在使用 PHP7.3.0

    1 回复  |  直到 6 年前
        1
  •  4
  •   yivi SilverLink    7 年前

    new $obj1 将创建的新实例 $obj1::class (这是 Test ).

    内部的比较 var_dump() 声明是一种承诺 严格的 两个物体之间的比较。它回来了 true 因为严格的比较是检查这两个实例( $obj1 $obj2 )引用不是同一类的同一实例。

    如果比较不严格(例如。 $obj1 != $obj2 )它会回来的 错误的 自从 $obj1 == $obj2 (例如,两者具有相同的属性和值,并且是同一类的实例)

    阅读有关上的对象比较的详细信息 this page 在文件中。

    您使用的7.3基本上是无关紧要的。从5.3开始,你会得到同样的结果