Изменение родительской переменной из дочернего класса

Я пытаюсь создать простую конфигурационную систему в 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; } } 

Класс ребенка

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

Вывод:

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

Есть ли способ / обходной путь / взломать это?

Solutions Collecting From Web of "Изменение родительской переменной из дочернего класса"

Измените self на static .

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

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