您的位置:首页 > 编程语言 > PHP开发

PHP中this,self和static的区别

2017-03-08 22:06 246 查看
首先,虽然我自诩是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可以完全搞定。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: