PHP中this,self和static的区别

首先,虽然我自诩是PHP程序员,却很少写关于PHP的博客内容,我感觉自己是个假的PHP程序员哭

其次今天学习到了PHP面向对象的内容,被3个东西搞昏了,this,static和self。

self和this还是很好区分的,可是self和static就很糊涂了,两者都能调用静态的方法和属性,看似使用上没有什么太大的分别,但是实际上分别很大,先来看下面这一段代码:

<?php

abstract class example{
	//这个函数的功能是希望当有class继承该抽象类的时候可以调用该create()方法来实例化自身
	public static function create(){
		return new self();
	}
}

//想法很美好,现实却是很骨干,上面的这种写法是错误的,下面这种写法才是正确的

abstract class example2{
	public static function create(){
		//这里应该写static()而不是self()
		return new static();
	}
}

解释具体原因之前先来看这位大哥写的一个例子: self与static区别       

我来简单总结一下他说明的含义:static不是指该类本身,而是具有一定的延迟性,不仅仅局限于当前的类当中。如那位大哥例子中最后输出的是Foo的信息,而不是static在的代码中的Boo的信息。

类比到最开始的例子中我们就能知道,我们希望当调用create()方法时能返回该类本身,但是如果我们使用了self()的话,那么只能返回new example(),而example类是abstract,抽象类,抽象类不能实例化,所以不能使用self,而只能使用static()。当有类来继承example2的时候,就会返回当前继承的类,而不是example2了。

接着就是this跟self的区别了,这个倒是还蛮好理解的,跟static相关的this全部不能解决,只能交给static和self,同时非static的,this可以完全搞定。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值