简单易懂 —— this、self、static 的区别
简介
如果是刚入门不久或较少比较久未使用者,往往比较容易搞混这三者之间的关系,网上的文章五花八门,不够简洁
在接下来的文章里,将省去干扰与花里胡哨的东西
读这文章需要理解的基本知识:PHP 继承、封装、多态
this
英文解释:这,这个
当一个方法在类定义内部被调用时,有一个可用的伪变量 $this。$this 是一个到主叫对象的引用(通常是该方法所从属的对象,但如果是从第二个对象静态调用时也可能是另一个对象)。
this 就是表示当前对象,从当前对象依次往上找,不存在或无权限则报错
self
英文解释:自己
使用 self:: 或者 CLASS 对当前类的静态引用,取决于定义当前方法所在的类
从 self::test
使用的『类』依次往上找 test
(重写优先),不存在或无权限则报错
在使用 self::test
时就得保证 test
是存在滴
static
英文解释:静态
该功能从语言内部角度考虑被命名为“后期静态绑定”。“后期绑定”的意思是说,static:: 不再被解析为定义当前方法所在的类,而是在实际运行时计算的。也可以称之为“静态绑定”,因为它可以用于(但不限于)静态方法的调用。
运行时,static::test
从最后的子『类』依次往上找 test
(子类优先),不存在或无权限则报错国
在使用 static::test
时 test
可以不存在,运行时 test
存在即可
本作品采用《CC 协议》,转载必须注明作者和本文链接
$this
调用类实例self
类自身static
调用类有错请指正~
这样说我更不懂了,直接上例子
这样说我更不懂了,直接上例子
@黑将军
@生活无限好
为什么不直接上例子
this、self、static 配合继承、封装、多态,变化相当复杂,也不是一两个,三四个例子就能说清楚滴,这文章是比较抽象的,并不关心过多细节(类似总结吧)
需要的知识
理解 PHP 继承、封装、多态
建议
『必须』要结合继承、封装、多态思考
例子
下面给了个简单粟子,更多粟子请看 官网,再自己加入继承、封装、多态特性,测试粟子
注意:例子是文档的阉割版