Извините за постоянное повторное редактирование моего вопроса, но похоже, что это единственный способ задать его правильно.
Моя первоначальная проблема заключается в том, что следующий псевдокод (контроллер и его родитель) не работает так, как мне бы хотелось:
class Parent {
var $data = array();
public function __construct( OtherClass $otherClass ) {
$this->data = $otherClass->getData(); //contains some => thing
$this->init($otherClass->getClassName());
}
public function init( $className ) {
new $className; //new Child
}
public function __get( $name ) {
return array_key_exists($name, $this->data) ? $this->data[$name] : null;
}
}
class Child extends Parent {
public function __construct() {
echo $this->some; //won't return 'thing';
}
}
fireeyedboy мне очень помог (спасибо) и указал Zend_Controller_Action
делает то, что я хочу, но я не могу понять как они это делают?
Оригинальный вопрос
Я знаю, что здесь были подобные вопросы, но я не могу их выбросить. Также я знаю, что могу полностью изменить весь процесс, чтобы сначала инициализировать Child, а затем позвонить parent::__construct
, но мне это кажется нежелательным. Как мне легко получить доступ к Parent
переменным в моем случае?
Обновление:
Позвольте мне немного уточнить. Child
- произвольный контроллер. Parent
является матерью всех контролеров. Многие фреймворки делают то же самое, но контроллеры могут использовать переменные, методы или объекты своих родительских контроллеров, не вызывая parent::__construct
(и, следовательно, заполняя конструкторы дочерних классов ненужными аргументами). Мне не нравится переписывать какие-либо из этих платформ, но я хотел бы понять, как они работают.