【PHP高级特性】后期静态绑定

"后期绑定"的意思是说,static::不再被解析为定义当前方法所在的类,而是由最终运算时动态决定。也可以称之为"静态绑定",因为它可以用于(但不限于)静态方法的调用。

静态方法调用

<?php
class A {
publicstaticfunction call(){
echo "class A"
}
publicstaticfunction test(){
self::call(); // self调用本类方法
static::call(); //static调用最终运行的方法
}
}
class B extends A {
publicstaticfunction call(){
echo "class B"
}
}
B::test();
输出:
class A
class B

动态方法调用

<?php
class A {
publicfunction call(){
echo "class A"
}
publicfunction test(){
self::call();
static::call();
}
}
class B extends A {
publicfunction call(){
echo "class B"
}
}
$b =new B();
$b->test()
输出:
class A
class B

实例化对象的调用

后期静态绑定还可以用于对象的实例化中,同上述内容一样,在实例化对象时,static会根据运行时调用的类来决定实例化对象,而self是根据所在位置的类来决定实例化对象。
<?php
class A {
publicstaticfunction create(){
$self =newself();
$static =newstatic();
return array($self,$static);
}
}
class B extends A {
}
$arr = B::create();
foreach($arr as $value){
var_dump($value);
}
输出:
object(A)[1]
object(B)[2]
 

 

posted @ 2018-09-28 11:33  PHPer_Cody  阅读(88)  评论(0)    收藏  举报