codeigniter中$ this和$ this-> ci之间的差异

时间:2011-10-14 05:05:00

标签: codeigniter variables php

嗨我正在使用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 个答案:

答案 0 :(得分:9)

所有控制器都扩展了主CI_Controller,因此调用$this->load之类的东西意味着访问父类CI_Controller中的父方法load()

$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的所有方法,这是一种“超级” “驱动整个框架的类。

查看loader类和CodeIgniter类,了解CI内部的工作方式。

答案 1 :(得分:0)

同意上面的答案,但实际上,load是一个变量,而不是一个函数。它是CI_Loader类的一个对象,当你调用$ this-> load-> libray()时,实际上它调用了CI_Loader中的library()函数。

答案 2 :(得分:-1)

$this没什么。它只是用来存储值。它就像一个变量。