Rumah > pembangunan bahagian belakang > tutorial php > PHP中new self()和new static()有什么区别

PHP中new self()和new static()有什么区别

小云云
Lepaskan: 2023-03-22 21:22:02
asal
1422 orang telah melayarinya

本文主要和大家分享PHP中new self()和new static()有什么区别,希望能帮助到大家。

1.new static()是在PHP5.3版本中引入的新特性。

2.无论是new static()还是new self(),都是new了一个新的对象。

3.这两个方法new出来的对象有什么区别呢,说白了就是new出来的到底是同一个类实例还是不同的类实例呢?

为了探究上面的问题,我们先上一段简单的代码:

class Father {    public function getNewFather() {        return new self();
    }    public function getNewCaller() {        return new static();
    }

}$f = new Father();print get_class($f->getNewFather());print get_class($f->getNewCaller());注意,上面的代码get_class()方法是用于获取实例所属的类名。
Salin selepas log masuk

这里的结果是:无论调用getNewFather()还是调用getNewCaller()返回的都是Father这个类的实例。

打印的结果为:FatherFather

到这里,貌似new self()和new static()是没有区别的。我们接着往下走:

 Sun1  Sun2  (-> (-> (-> (->getNewCaller());看上面的代码,现在这个Father类有两个子类,由于Father类的getNewFather()和getNewCaller()是public的,所以子类继承了这两个方法。
Salin selepas log masuk

打印的结果是:FatherSun1FatherSun2

我们发现,无论是Sun1还是Sun2,调用getNewFather()返回的对象都是类Father的实例,而getNewCaller()则返回的是调用者的实例。

即$sun1返回的是Sun1这个类的实例,$sun2返回的是Sun2这个类的实例。

现在好像有点明白new self()和new static()的区别了。

首先,他们的区别只有在继承中才能体现出来,如果没有任何继承,那么这两者是没有区别的。

然后,new self()返回的实例是万年不变的,无论谁去调用,都返回同一个类的实例,而new static()则是由调用者决定的。

上面的$sun1->getNewCaller()的调用者是$sun1对吧!$sun1是类Sun1的实例,所以返回的是Sun1这个类的实例,$sun2同样的道理就不赘述了。

好了,关于PHP中new self()和new static()的区别就暂时说这么多,希望对读者的理解有所帮助,如果有不对的地方欢迎拍砖扔蛋。

相关推荐:

new self()和new static()有什么区别

php中new self()和new static()两者之间的区别!

new static()与new self()的区别用法介绍

Atas ialah kandungan terperinci PHP中new self()和new static()有什么区别. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Isu terkini
php - nyahpaut masalah fail yang dipadam
daripada 1970-01-01 08:00:00
0
0
0
Mengapa fail yang saya rujuk 404?
daripada 1970-01-01 08:00:00
0
0
0
Fail gaya css tiada satu
daripada 1970-01-01 08:00:00
0
0
0
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan