0

静的メソッドを非静的メソッドでオーバーライドする方法は?

コード

class Env {
    static protected $vars = [
    ];

    static public function get_env_var($var){
        return self::$vars[$var];
    }

    static public function set_env_var($var, $value){
        self::$vars[$var] = $value;
    }
}

class Test extends Env {
    private $env_vars = [];

    public function __construct(){
        $this->env_vars = self::$vars;
    }

    public function get_env_var($var){
        return $this->env_vars[$var];
    }

    public function set_env_var($var, $value){
        $this->env_vars[$var] = $value;
    }
}

$Test = new Test();

エラー

Cannot make static method Env::get_env_var() non static in class Test in
4

4 に答える 4

2

できません。

static以前のようにそれらを定義した場合、正当な理由があります。

于 2012-09-29T20:09:36.003 に答える
2

元々の質問は、静的メソッドを非静的メソッドにオーバーライドする方法でした。子供はまだ静止しているので、あなたの答えは質問の答えではありません。

静的メソッドを非静的メソッドでオーバーライドすることはできません。

于 2015-03-25T10:41:51.093 に答える
1
public static function get_env_var($var)
于 2012-09-29T20:10:46.863 に答える
0
class Parent
{
    public static function start()
    {
        echo 'Parent::start';
    }
}

class Child extends Parent
{
    public static function start()
    {
        parent::start();
        echo 'Child::start';
    }
}
于 2013-11-16T20:36:02.223 に答える