PHP中的延迟静态绑定
1、php5.3已经开始支持延迟静态绑定。
延迟静态绑定指的是在父类中获取子类的最终状态。在父类中,如果出现self关键字,被子类继承后,这个self值的还是父类而不是子类。
如果在父类中出现了self关键字,并且子类继承了含有self的这段代码,那么需要考虑静态延迟绑定。在父类中使用static代替self.
说到底,self到底表示什么?self用在类中,引用自身的静态成员变量,表示的就是类名,完全可以被类名替换掉。被子类继承之后,self还是表示的父类名,而不是子类self了
2、<?php
class A{
public static $a=1;
public function test(){
echo self::$a;//自身的属性a
}
}
class B extends A{
public static $a = 2;
}
$m = new B();
$m->test();//最终输出了1,也就是父类的属性a
?>
3、要想在父类中test方法中实现取到子类本身的属性a,需要用static代替self
<?php
class A{
public static $a=1;
public function test(){
echo static::$a;//自身的属性a
}
}
class B extends A{
public static $a = 2;
}
$m = new B();
$m->test();//最终输出了1,也就是父类的属性a
?>
self用在类中,引用自身的静态成员变量,它就是表示类名,完全可以用类名替换掉。所以继承之后self还是父类的类名,而不是子类的类名。延迟静态绑定用static来表示最终类。
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
阅读量:195
阅读量:76
阅读量:189
阅读量:150
阅读量:156