Передача параметров из контроллера в представление в шаблоне php mvc с использованием extract ()

Я пытался понять учебник php MVC, и я не мог понять, как параметры были переданы из контроллера во вновь созданное представление с помощью
extract();(см. класс Controller ниже), чтобы добавить их в таблицу символов (я не знаю, какова будет его область применения) внутри функции render() из класса контроллера, а затем на той же функции вызовите require($view) функция для отображения представления, внутри которого эти извлеченные переменные будут просто доступны для вызова с <?php echo $var; ?> ,
Для меня эти извлеченные переменные будут доступны только локально внутри функции, в которой они были извлечены (это означает, что render() функция).
Это потому, что функция require была вызвана на том же уровне, что эти извлеченные переменные будут доступны внутри представления? Будет ли представление использовать ту же таблицу символов, что и контроллер? или эти переменные будут установлены в глобальную область?

<?php
class Controller{

public $request;
public $vars = array();

function __construct($request){
$this->request = $request;
}

public function render($view){

extract($this->vars);

$view = ROOT.DS.'view'.DS.$this->request->controller.DS.$view.'.php';

require($view);

}
public function set($key,$value=null){
if(is_array($key)){
$this->vars += $key;
}else{
$this->vars[$key] = $value;
}

}}

?>

PagesController.php, в котором будет вызываться функция render ():

<?php
class PagesController extends Controller{

function view($nom){$this->set(array('phrase' => 'Salut ',
'nom' => 'Bohh')
);

$this->render('index2');
}

}

?>

0

Решение

extract() импортирует переменные в таблицу символов текущей области. Поэтому «извлеченные» переменные доступны из render() метод.

PHP документы по извлечению:

Импортировать переменные из массива в текущую таблицу символов.

Основное внимание здесь уделяется слову ток.


Причина, по которой переменные доступны из файла, который required является то, что все языковые конструкции относительно включения наследуют область места, откуда файл был включен.

Состояние PHP документов:

Когда файл включен, код, который он содержит, наследует переменную область строки, в которой происходит включение. Любые переменные, доступные в этой строке в вызывающем файле, будут доступны в вызываемом файле, начиная с этого момента. Однако все функции и классы, определенные во включаемом файле, имеют глобальную область видимости.


Переменные, которые вы вводите во включаемый файл, также будут доступны только в текущей области. Однако функции и классы не будут. Они будут находиться в глобальном масштабе.


Будет ли представление использовать ту же таблицу символов, что и контроллер?

Он будет использовать таблицу символов контроллеров render() метод в вашем случае.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector