2016-04-20 3 views
0

Я понимаю, что $ this относится к текущему объекту.

Однако, как правило, ссылаясь на $ это в корне файла (не внутри объекта) вызовет ошибку:

PHP Fatal error: Using $this when not in object context in - on line 2 

..но в представлении, у меня есть этот код:

<?php 
$this->load->view('templates/header'); 
$this->load->view($view); 
$this->load->view('templates/footer'); 

Как PHP находит глобальный/одиночный экземпляр CI из $ this reference?

+0

'$ this-> load-> вид (file) 'означает' include file' –

ответ

1

Код в вашем представлении загружается в звонок eval или через include в методе _ci_load класса Loader. Метод также получает экземпляр CI.

см ./system/core/Loader.php

Получение экземпляра на линии 920

$_ci_CI =& get_instance(); 

Загрузка вид в eval или include на линии 969

// 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') && ! ini_get('short_open_tag') && 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 
} 
+0

Хотелось бы, чтобы я мог ответить на оба ответа, но это более полно. –

2

Когда $this->load->view() вызывается в контроллере, файл представления вводится в класс контроллера с помощью команды PHP include. Таким образом, код представления становится частью класса контроллера - становится частью области $this.

+0

Хотелось бы, чтобы я мог принять это, так как это точно. –

Смежные вопросы