slego
Новичок
Статические атрибуты и наследование
Итак, есть абстрактый класс считывания конфига. Все его методы и свойства - статические
Теперь пытаюсь унаследовать от него два других класса,
каждый из которых работает со своим файлом.
Запускаем все это
Теперь, собственно, проблема: как видно из результатов работы скрипта, если проверять заполненость массива $_data в методе parse(), то у нас все в порядке - массив заполнен. Но если использовать метод getParameter(), определенный в предке, то обращение идет к статическому массиву $_data класса-родителя. Почему так?
Понимаю, что скорее всего, это я чего-то намудрил...
Можно, конечно, в абстрактном классе только объявить метод getParameter(), а реализовать (одним и тем же способом) уже в каждом потомке отдельно... Но не кузяво как-то это
Подскажите, пожалуйста, как ПРАВИЛЬНО реализовать такую схему.
Большое спасибо.
Итак, есть абстрактый класс считывания конфига. Все его методы и свойства - статические
PHP:
abstract class Config
{
protected static $_data = array();
abstract public static function parse();
public static function getParameter($param_name)
{
echo isset(self::$_data[$param_name]) ?
self::$_data[$param_name] :
"yo, madafaka!<br>";
}
}
каждый из которых работает со своим файлом.
PHP:
class Foo extends Config
{
public static function parse()
{
//... parsing the config structure
self::$_data["foo"] = "something";
echo self::$_data["foo"]."<br>";
}
};
class Bar extends Config
{
public static function parse()
{
// ... parsing the config structure
self::$_data["bar"] = "something else";
echo self::$_data["bar"]."<br>";
}
};
PHP:
Foo::parse(); // something
Foo::getParameter("foo"); // yo, madafaka!
Bar::parse(); // something else
Bar::getParameter("bar"); // yo, madafaka!
Понимаю, что скорее всего, это я чего-то намудрил...
Можно, конечно, в абстрактном классе только объявить метод getParameter(), а реализовать (одним и тем же способом) уже в каждом потомке отдельно... Но не кузяво как-то это

Подскажите, пожалуйста, как ПРАВИЛЬНО реализовать такую схему.
Большое спасибо.
