簡體   English   中英

如何用非靜態方法覆蓋靜態方法?

[英]How to override static methods with non static methods?

如何用非靜態方法覆蓋靜態方法?

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

你不能

如果以前將它們定義為static ,則有充分的理由。

最初的問題是如何將靜態方法重寫為非靜態方法。 您的答案不是問題的答案,因為孩子仍然是靜態的。

您不能使用非靜態方法覆蓋靜態方法。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM