php中的new static和new self

前段时间封装了一个类库:部分代码如下

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调用,这使用父类的方法或者变量(静态)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值