我似乎无法覆盖protected static变量.考虑到你也不能覆盖任何私有变量,这是相当烦人的.我怎么解决这个问题?(必须支持PHP 5.2)
<?
class Foo{
protected static $stuff = 'Foo';
public function showStuff(){
echo self::$stuff . PHP_EOL;
}
}
class Bar extends Foo{
protected static $stuff = 'Bar';
}
$f = new Foo();
$b = new Bar();
$f->showStuff(); // Output: Foo
$b->showStuff(); // Output: Foo
?>
Run Code Online (Sandbox Code Playgroud)
lon*_*day 18
您需要使用后期静态绑定,这是PHP 5.3中引入的一项功能.在你的班级中Foo,self指的是Foo班级.您想要引用呼叫发起的类.您需要使用关键字static:
<?
class Foo{
protected static $stuff = 'Foo';
public function showStuff(){
echo static::$stuff . PHP_EOL; // <-- this line
}
}
class Bar extends Foo{
protected static $stuff = 'Bar';
}
$f = new Foo();
$b = new Bar();
$f->showStuff(); // Output: Foo
$b->showStuff(); // Output: Bar
?>
Run Code Online (Sandbox Code Playgroud)