2015-07-04 2 views
2

Я пытаюсь создать простую конфигурационную систему в php, где вы можете просто расширить базу и поместить данные в дочерний класс, а родительский дескриптор все для вас. Я позволю коду говорить сам за себя. Однако, когда я пытаюсь это сделать, дочерний класс не изменит родительскую переменную.Изменить родительскую переменную из дочернего класса

Родитель класс

class ConfigBase { 
    protected static $data = []; 

    public static function Get($name) 
    { 
     if(!isset(self::$data[$name])) 
     { 
      return null; 
     } 

     return self::$data[$name]; 
    } 

    public static function Set($name, $value) 
    { 
     self::$data[$name] = $value; 
    } 
} 

класс Child

class Database extends ConfigBase { 
    protected static $data = [ 
     'host'  => 'localhost', 
     'username' => 'root', 
     'password' => '', 
     'database' => '', 
     'port'  => 3306 
    ]; 
} 

Выход:

// NULL 
echo Database::Get('host'); 

Есть ли способ/обходной путь/хак для достижения этой цели?

ответ

4

Изменить selfstatic.

Когда вы используете self, он всегда будет оценивать класс, в котором вы определили назначение. Для получения дополнительной информации см. http://php.net/manual/en/language.oop5.late-static-bindings.php

Или избавиться от статического свойства и использовать переменные и методы экземпляра. Тогда вы не ограничены одной конфигурацией определенного типа.