A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

首先,虽然我自诩是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


1 个回复

正序浏览
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马