Если вы посмотрите на метод _ci_load библиотеки Loader (который вызывает view ()), в строке 639 в последней версии вы увидите этот фрагмент кода:
/*
* Extract and cache variables
*
* You can either set variables using the dedicated $this->load_vars()
* function or via the second parameter of this function. We'll merge
* the two types and cache them so that views that are embedded within
* other views can have access to these variables.
*/
if (is_array($_ci_vars))
{
$this->_ci_cached_vars = array_merge($this->_ci_cached_vars, $_ci_vars);
}
extract($this->_ci_cached_vars);
Вот почему ваши переменныепереданные в представление доступны автоматически во вложенных представлениях.
Но ваша локально объявленная переменная не .. потому что они не передаются следующему вызову view ().
Обратите внимание, чтоон объединяет переменные, так что технически вы можете просто передать своему подпредставлению переменную, которая изменяется в виде сверху, остальное будет унаследовано автоматически.для ясности и для других потенциальных людей, читающих ваш код, лучше всегда явно передавать все переменные, которые потребуются вашему подпредставлению .. код становится легче читать / отлаживать.
Примечание: побочным эффектом кэширования является то, что если у вас есть 2 подпредставления, переменные, переданные в первое, будут кэшироваться и автоматически передаются также во второе представление.... это может иногда приводить к проблемам с отладкой.