如何使用非静态方法覆盖静态方法?

时间:2012-09-29 20:06:52

标签: php class

如何使用非静态方法覆盖静态方法?

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 个答案:

答案 0 :(得分:2)

你不能。

如果您之前将其定义为static,则您有正当理由。

答案 1 :(得分:2)

原始问题是如何将静态方法覆盖为非静态方法。 你的答案不是问题的答案,因为孩子仍然是静止的。

您不能使用非静态方法覆盖静态方法。

答案 2 :(得分:1)

public static function get_env_var($var)

答案 3 :(得分:0)

class Parent
{
    public static function start()
    {
        echo 'Parent::start';
    }
}

class Child extends Parent
{
    public static function start()
    {
        parent::start();
        echo 'Child::start';
    }
}