Как сделать ob_start и извлечь функцию вместе? - PullRequest
0 голосов
/ 29 марта 2012

Я заметил, что много фреймворков / движков для блогов / и т.д. используйте 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"?

...