У меня есть класс, который я разрабатываю, методы которого вызывают друг друга и отправляют данные,
Class Template(){
public variables = array('text' => 'test');
public function loadTemplate( $filename ){
require PROJECT_PATH .DS. $filename;
}
public function render(){
extract($this->variables);
$this->loadTemplate('index.php');
}
}
Index.php теперь отображает извлеченные переменные
<html>
<body>
<?php
var_dump($text);
?>
</html>
Но теперь он не отображает значения NULL !! но когда мне это нужно напрямую, это работает, что я делаю не так?
Заранее спасибо.
1 ответ
Простой ответ заключается в том, что вам нужно переместить вызов extract()
в функцию, которая фактически вызывает вызов require
.
Более длинный ответ состоит в том, что extract()
извлекает переменные в область видимости текущей функции. Когда вы вызываете новую функцию, чтобы фактически потребовать шаблон, она имеет новую область видимости. Фактически, у вас будет доступ только к переменной $filename
.
Еще один момент: пожалуйста добавьте EXTR_SKIP
в качестве второго аргумента к extract()
< / a>, чтобы он не перезаписывал имя файла (и, следовательно, не превращался в уязвимость системы безопасности):
function loadTemplate($filename) {
extract($this->variables, EXTR_SKIP);
require PROJECT_PATH .DS. $filename;
}
Или вообще не храните его в переменной:
function render() {
extract($this->variables);
require $this->findTemplatePath("index.php");
}
function findTemplatePath($template) {
return PROJECT_PATH .DS. $filename;
}
Похожие вопросы
Новые вопросы
php
PHP — это открытый, мультипарадигмальный, динамически типизированный и интерпретируемый язык сценариев, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.