PHP中this,self和static的区别

    xiaoxiao2021-03-25  125

    首先,虽然我自诩是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可以完全搞定。

    转载请注明原文地址: https://ju.6miu.com/read-7134.html

    最新回复(0)