Как я могу передать переменные в файл, включенный в класс в PHP? - PullRequest
0 голосов
/ 13 марта 2009

Итак, я работаю над своей собственной небольшой платформой MVC в качестве учебного упражнения. Это прекрасно работает, но я хочу иметь возможность ссылаться на переменные в моих файлах просмотра без $ this.

Так, например, у меня есть объект контроллера, который создает объект вида. Из контроллера я передаю переменные в виде, подобном этому

$this->view->foo = "bar";

Тогда объект представления включает соответствующий код для представления (например, myView.phtml). Таким образом, чтобы получить доступ к "foo" в файле представления, я использую это

echo $this->foo;

Но то, что я хотел бы сделать, и я не знаю, возможно ли это или нет, я упускаю что-то очевидное, но я хотел бы сделать ссылку на переменные, подобные этой

echo $foo;

Если я не публикую весь источник, кто-нибудь может указать мне правильное направление?

Ответы [ 3 ]

1 голос
/ 13 марта 2009

Вы пробовали извлечь ? Вам нужно будет добавить метод, чтобы поместить все переменные в массив. Единственное реальное ограничение - это делает переменные доступными только для чтения.

1 голос
/ 13 марта 2009

Если вы хотите, чтобы каждая переменная в объекте представления была доступна внутри представления, вы можете добавить свои переменные в свойство объекта представления, являющегося массивом, а затем использовать extract () , чтобы сделать их в наличии:

$this->view->variables['foo'] = 'bar';

extract($this->view->variables); // now $foo = 'bar';

Я не большой поклонник extract (), но это позволит выполнить то, что вы ищете.

1 голос
/ 13 марта 2009

Вы могли бы написать некоторый код, который анализирует входные данные html-представления и автоматически изменяет ваши записи с $ foo или [foo] на $ this-> foo.

Таким образом, вы можете поместить что-то вроде этого в html-представление:

<p>[foo]</p>

, а затем есть некоторый код вида, анализирующий файл и изменяющий все экземпляры [foo] на значение $ this-> foo. Таким образом, ваш вывод становится:

<p>I'm the foo value</p>

Или вы можете использовать что-то вроде Smarty - он делает это для вас и имеет много других причин использовать его тоже.

...