首先,虽然我自诩是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可以完全搞定。
---------------------
【转载】仅作分享,侵删
作者:trouble-i-am-in
原文:https://blog.csdn.net/YQXLLWY/article/details/60883020
|
|