разница между $ this и $ this-> ci в codeigniter - PullRequest
1 голос
/ 14 октября 2011

привет, я использую codeigniter, в моем конструкторе контроллера я иногда использую $this, иногда $this->ci

в двух конструкторах, которые я использую, как это

public function __construct()
{
    $this->ci =& get_instance();
    $this->ci->load->library('form_validation');
    $this->ci->load->library('catalog/CatalogManager');
}

function __construct() 
    {
    parent::__construct ();
    $this->ci = & get_instance ();
    $this->load->library ( 'auth_lib' );
    $this->load->library ( 'session' );
    }

при передаче данных ввид, я использую

$this->ci->data и $this->data в двух вышеупомянутых случаях.

также не дает ошибок, но я запутался, как правильно использовать.

пожалуйста, помогите...........

Ответы [ 3 ]

10 голосов
/ 14 октября 2011

Все контроллеры расширяют основной CI_Controller, поэтому вызов чего-то вроде $this->load означает доступ к родительскому методу load() внутри родительского класса CI_Controller.

$this->ci работает, потому что с $this->ci = &get_instance() вы звонитессылка на основной класс контроллера ... еще раз.Если вы посмотрите в файл начальной загрузки (IIRC. Или файл codeigniter.php), то найдется функция get_instance(), которая только возвращает (по ссылке) экземпляр класса CI_Controller.

Итак, в основном,вызовы $this->ci->load и $this->load - это одно и то же, только первое не нужно в Controller / Model / View, потому что система уже делает это в родительском классе (через загрузку метода).

Если вы посмотрите на библиотеки, например, вместо этого вы увидите, что использование $this->ci->method() необходимо, потому что вам необходимо иметь все методы CI_Controller, который является своего рода «суперклассом», который управляетвся структура.

Взгляните на класс загрузчика и класс CodeIgniter, чтобы понять, как внутренне работает CI.

0 голосов
/ 10 июля 2015

$this - ничто.Это просто использовать для хранения значения.Это как переменная.

0 голосов
/ 07 апреля 2013

Согласитесь с ответом выше, но на самом деле нагрузка - это переменная, а не функция. это объект класса CI_Loader, когда вы вызываете $ this-> load-> libray (), фактически он вызывает функцию library () в CI_Loader.

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