面向对象 - 延迟静态绑定 ¶
作者:KK
发表日期:2017.5.29
新手不用太注意记这个 ¶
学一遍了解了情况,记得就记得,不记得也算了吧,以后用到这个知识的时候再回来看,或者下次重新复习时加固就好,简单了解一遍就好
只调用自己的方法 ¶
class A{
public static function test1(){
return 'aaa';
}
public static function test2(){
echo self::test1();
}
}
class B extends A{
public static function test1(){
return 'bbb';
}
}
B::test2(); // aaa
虽然B类重写了A类的test1方法返回了bbb,但是test2方法在A里面,通过self
关键字指定了必须调用自己的方法,这个自己指谁呢?self关键字用在A类里,所以其实就是指A类咯,于是B类重写了test1的时候也不用它了
如果子类重写了这个方法,那就用子类的 ¶
class A{
public static function test1(){
return 'aaa';
}
public static function test2(){
echo static::test1();
}
}
class B extends A{
public static function test1(){
return 'bbb';
}
}
B::test2(); // bbb
注意test2方法里之前的self
换成了static
,这就是本文标题所说的延迟静态绑定
特性,如果B类没有重写,那它就会用A类的,否则就用B类的
其中self和static关键字通常都用在调用静态方法(static function)的场合,可以将static::方法名()
跟$this->方法()
的作用概念是差不多的,$this
的时候也是子类有重写就用子类的