在 CodeIgniter 中查看 $this 关键字

Chr*_* G. 3 php codeigniter

我试图了解CodeIgniter 中视图文件内部$this->load->view()工作原理。

core/Controller.php 正在调用 core/Loader.php ,然后调用 _ci_load() ,后者依次执行 include('/path/to/view');

此时不应该$this引用 Loader 类吗?如何$this引用控制器?

根据我的理解,您应该在视图文件中调用 $this->view() 。不是 $this->load->view() 因为 load() 函数在 Loader 内部是不可访问的。它是 Controller 基类的类变量。IE,$this->load =& load_class('Loader');

请注意:我正在尝试了解 CodeIgniter 内部结构。作为 CodeIgniter用户,我非常了解如何将视图文件嵌入到其他视图文件中。请不要留下解释如何使用$this->load() 的答案。

Wes*_*rch 5

为了简化对$this视图中引用内容的理解,由于视图是由控制器方法“加载”的,因此视图仍然在与该方法相同的范围内运行,这意味着$this根据加载它的类可以具有不同的上下文。

例如:

class Controller1 extends CI_Controller {}
Run Code Online (Sandbox Code Playgroud)

在此示例控制器中加载的任何视图文件中,$this特指Controller1该类,该类也可以访问CI_Controller公共和受保护的属性/方法(如 Loader 或 Input 类,它们被分配给CI_Controller的loadinput属性),因为它扩展了该类.

控制器仍然只是普通的旧 PHP 类。如果我要这样做:

class Controller1 extends CI_Controller {
    $this->foobar = 'Hello';
}
class Controller2 extends CI_Controller {
    $this->foobar = 'World';
}
Run Code Online (Sandbox Code Playgroud)

...如果我们在这些控制器中的任何一个的任何方法中加载相同的视图文件$this->foobar在该视图文件中使用将返回不同的值。