我们知道在PHP的一个类中引用父类的静态属性(或方法)的语法是:
parent::$var; // 引用父类的静态属性
parent::say(); // 引用父类的静态方法
引用当前类的静态属性语法是:
self::$var; // 引用当前类的静态属性
self::say(); // 引用当前类的静态方法
上面的parent、self关键字是静态引用的作用域,parent的作用域是父类,self的作用域是当前类,除了这两个,还有一个static关键字是全部作用域的:
static::$var; // 引用全部静态作用域的属性
static::say(); // 引用全部静态作用域的方法
看了下面这个脚本,相信你就会明白static关键字的作用:
<?php
class A {
static $fruit = 'apple';
public function say() {
echo self::$fruit, '</br>'; // 输出apple
echo static::$fruit, '</br>'; // 输出banana
}
}
class B extends A {
static $fruit = 'banana';
}
$obj = new B();
$obj->say();
因为在B类中,复写了A类中的$fruit
静态属性,所以static::$fruit
的输出值是banana,而不是A类中的apple。
更详细的信息可以参阅:http://php.net/manual/zh/language.oop5.late-static-bindings.php