PHP как выводить переменные в шаблонах? Трудно сформулировать сразу вопрос, я опишу проблему.
Есть классы и у них есть свои свойства, например имя пользователя и другие данные.class User{
private $_name;
public function getName(){
return $this->_name;
}
}
Есть класс, который выбирает нужный шаблон и открывает его.class PageSelect{
# передаются данные из get запроса, получаю название нужного шаблона
public function getTpl(){
require_once($_SERVER['DOCUMENT_ROOT'].'/tpl/' . $this->tmpl . '.tpl');
}
}
Получается, что ранее созданные объекты, например $userName = new User(); использовать в шаблоне нельзя, область видимости не позволяет. И тут я понимаю, что делать статические классы - неправильно, глобальный доступ - неправильно, нужно 1. либо подключать шаблоны в самом main, чтобы область видимости было для всего, или 2. передавать в PageSelect все нужные свойства для вывода их на страницу. Как это делать? Создать массив и во всех методах пихать туда все свойства? Вдруг я захочу выводить что-то. Как быть? Как правильнее это делать, не понимаю.

21 Авг 2019 в 07:01
153 +1
0
Ответы
1

Есть несколько способов передачи переменных из объектов в шаблоны. Ниже приведены некоторые из них:

Использование метода в объекте PageSelect для установки необходимых свойств:class PageSelect {
private $userData;
public function setUserData(User $user) {
$this->userData = $user;
}
public function getTpl() {
require_once($_SERVER['DOCUMENT_ROOT'].'/tpl/' . $this->tmpl . '.tpl');
}
}Использование массива для передачи переменных в шаблон:class PageSelect {
private $data = [];
public function setData($key, $value) {
$this->data[$key] = $value;
}
public function getTpl() {
extract($this->data);
require_once($_SERVER['DOCUMENT_ROOT'].'/tpl/' . $this->tmpl . '.tpl');
}
}Использование метода в шаблоне для получения необходимых данных:class PageSelect {
public function getTpl(User $user) {
require_once($_SERVER['DOCUMENT_ROOT'].'/tpl/' . $this->tmpl . '.tpl');
}
}Использование глобальных переменных (не рекомендуется из-за потенциальной сложности в поддержке и отладке кода):class PageSelect {
public function getTpl() {
global $userName;
require_once($_SERVER['DOCUMENT_ROOT'].'/tpl/' . $this->tmpl . '.tpl');
}
}

Выбор конкретного метода зависит от конкретных требований и архитектуры вашего приложения. Важно помнить о принципах чистого кода и избегать глобальных переменных в целях повышения читаемости и управляемости кода.

20 Апр в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 91 855 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир