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
176 +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 Апр 2024 в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир