Я заметил, что много фреймворков / движков для блогов / и т.д. используйте ob_start для получения выходных данных, и для переменных, которые должны быть переданы в шаблон, вызывается extract
непосредственно перед вызовом ob_start
.
Я предполагаю, что буферизованный вывод имеет доступ к любым переменным, созданным с помощью extract
, но я не могу найти какую-либо конкретную документацию по этому вопросу.
Пример из Codeigniter (некоторые комментарии для краткости удалены из исходного кода):
extract($this->_ci_cached_vars);
ob_start();
// If the PHP installation does not support short tags we'll
// do a little string replacement, changing the short tags
// to standard PHP echo statements.
if ( ! is_php('5.4') && (bool) @ini_get('short_open_tag') === FALSE && config_item('rewrite_short_tags') == TRUE)
{
echo eval('?>'.preg_replace('/;*\s*\?>/', '; ?>', str_replace('<?=', '<?php echo ', file_get_contents($_ci_path))));
}
else
{
include($_ci_path); // include() vs include_once() allows for multiple views with the same name
}
Итак, это в основном извлечение набора переменных, которые были переданы в виде массива, а затем использование ob_start
для буферизации некоторого вывода (в основном, просто включение для вывода конкретного представления). В большинстве случаев включаемый вид / шаблон содержит ссылки на переменные, извлеченные непосредственно перед ob_start.
Так работает ob_start? имеет ли он доступ к переменным, объявленным в области, в которой он используется? Если я объявлю $test = "hello"
непосредственно перед ob_start, смогу ли я использовать $ start в представлении и вывести его "hello"?