搜 索

在php代码中新建对象用到的new self与new static有什么不同

编辑:QTOOL.NET日期:2020-05-0980

我们在使用php代码新建对象的时候,一般会用到new self与new static,那么它们在使用的时候区别在哪里?

先说说new static(),new static与new self一样,在php代码中,它是用来新建一个对象的.

那么他们之间的不同之处在哪里呢?

new static与new self之间的不同在于在于新创建的是同一个类的实例与不同类的实例.

如下面这段示例:

<?php

class newdx {

    public function hqnewself() {

        return new self();

    }

    public function hqnewstatic() {

        return new static();

    }

}

$newdx = new newdx();

echo get_class($newdx->hqnewself());

echo get_class($newdx->hqnewstatic());

?>


以上代码通过使用php自带的get_class()方法是来用于获取指定实例所属类名

运行后可以得出,无论他们调用的是hqnewself()函数,还是hqnewstatic()函数,其结果都为newdx

然而当我们继续创建

class newcl1 extends newdx {


}

class newcl2 extends newdx {


}

$newcl1 = new newcl1();

$newcl2 = new newcl2();


echo get_class($newcl1->hqnewself());

echo get_class($newcl1->hqnewstatic());

echo get_class($newcl2->hqnewself());

echo get_class($newcl2->hqnewstatic());


以上代码表示newdx类有两个子类,由于newdx类的hqnewself()和hqnewstatic()是公共的,所以在子类中依旧继承了这两方法。

其运行结果依次为newdx、newcl1、newdx、newcl2,无论是子类newcl1,还是子类newcl2,调用hqnewself()即new self()其返回的对象都是类newdx,而hqnewstatic()即 new static(),则返回了调用者子类的实例名称.

他们的区别在类的继承中才会显示出来,当它们没有任何继承,那么使用他们没有什么区别。

new self()返回的实例都是同一个类的实例,而new static()则是由调用的子类决定的.

TAG标签:php
此文章由QTOOL.NET编辑
最新文章

热门标签