Codeigniter: область видимости переменных при вызове представления из представления. Странный - PullRequest
4 голосов
/ 27 октября 2010

Меня смущает область видимости переменных при вызове представления изнутри представления. Я немного протестировал и обнаружил:

  1. Если переменные первоначально передаются из контроллера, нет необходимости что-либо делать для передачи переменных из представления в представление.
  2. Если переменные объявлены в представлении, я должен явно передать переменные из представления в представление. (например: $ this-> load-> view ("hoge", $ data);)

Я нахожу это немного странным во втором случае, потому что я понимаю, что $ this-> load-> view () - это версия codeigniter php include (), которая не требует от меня явной передачи переменных.

Кто-нибудь может догадаться / пролить немного света на то, почему они это сделали?

1 Ответ

4 голосов
/ 27 октября 2010

Если вы посмотрите на метод _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 подпредставления, переменные, переданные в первое, будут кэшироваться и автоматически передаются также во второе представление.... это может иногда приводить к проблемам с отладкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...