php new static与new self 的区别
程序员文章站
2022-05-03 23:50:03
前段时间封装了一个类库:部分代码如下class A{private function __construct(){}public static function instance($args){if(!(self::$instance of self)){//do something with args self::$instance = new self();}return instance ; }}class B extends a...
前段时间封装了一个类库:部分代码如下
class A
{
private function __construct(){}
public static function instance($args)
{
if(!(self::$instance of self))
{
//do something with args
self::$instance = new self();
}
return instance ;
}
}
class B extends a
{
}
var_dump(B::instance([]))
//object(A)······
为了方便扩展,便写了个子类 继承了这个类,但是在使用的时候发现,获取的实例都是父类的实例。
将代码中的new self 改为new static 即可:
class A
{
private function __construct(){}
public static function instance($args)
{
if(!(self::$instance of self))
{
//do something with args
self::$instance = new static();
}
return instance ;
}
}
class B extends a
{
}
var_dump(B::instance([]))
//object(B)······
new static 比较聪明,返回的是当前类的实例,new self比较死板, 返回的是父类的实例。
若无继承关系,new static 与new self 无任何区别。
另注:代码中调用方法或者变量与new static 和 new self 的情况类似,
若子类重写了方法或者静态变量,那么通过static关键字调用,则使用子类重写的方法或者是静态变量。通过self调用,这使用父类的方法或者变量(静态)
本文地址:https://blog.csdn.net/huang_cheng_zhi/article/details/109642829