黑马程序员技术交流社区

标题: 【上海校区】PHP中的self、static、parent关键字 [打印本页]

作者: 摩西摩西OvO    时间: 2018-7-25 16:38
标题: 【上海校区】PHP中的self、static、parent关键字

1.静态属性与方法可以在不实例化类的情况下调用,直接使用类名::方法名的方式进行调用。静态属性不允许对象使用->操作符调用。

2.parent用来继承的时候用,我们可以使用parent去继承重写上面的方法,但是却不是叠加。

不存在继承的时候

不存在继承的意思就是,就书写一个单独的类来使用的时候。self和static在范围解析操作符 (::) 的使用上,并无区别。

此时,self和static的表现是一样的,可以替换为该类名::的方式调用。

输出结果:

继承的时候

在继承时,self和static在范围解析操作符 (::) 的使用上有差别。parent也是在继承的时候使用的。

输出结果

在文章的最后,我们分析一个手册上的例子

输出结果

我们单独拿出test方法进行分析:

1)A::foo();这个语句是可以在任何地方执行的,它表示使用A去调用静态方法foo()得到’A’,然后直接调用A里面的who()方法。
2)parent::foo();C的parent是B,B的parent是A,回溯找到了A的foo方法;static::who();语句中的static::调用的方法会被子类覆盖,所以优先调用C的who()方法,如果C的who方法不存在会调用B的who方法,如果B的who方法不存在会调用A的who方法。所以,输出结果是’C’。优先级c->b
3)self::foo();这个self::是在B中使用的,所以self::等价于B::,但是B没有实现foo方法,B又继承自A,所以我们实际上调用了A::foo()这个方法。foo方法使用了static::who()语句,导致我们又调用了C的who函数。[注2]

[url=]注1:补充解释上面的(2)[/url]

A B B

[url=]注2:补充解释上面的(3)[/url]

输出结果:

A C fooB

作者: 平渊渡海    时间: 2018-7-25 17:03

作者: wuqiong    时间: 2018-7-26 09:42

作者: 摩西摩西OvO    时间: 2018-7-26 09:47

作者: 不二晨    时间: 2018-7-26 11:36
奈斯,很赞
作者: 吴琼老师    时间: 2018-7-26 16:09





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2