PHP无法覆盖受保护的静态

Pwn*_*nna 6 php

我似乎无法覆盖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)