在 codeigniter 中调用 $CI 和使用 `this` 有啥不同吗? [复制]

Posted

技术标签:

【中文标题】在 codeigniter 中调用 $CI 和使用 `this` 有啥不同吗? [复制]【英文标题】:Is there different between calling $CI and using `this` in codeigniter? [duplicate]在 codeigniter 中调用 $CI 和使用 `this` 有什么不同吗? [复制] 【发布时间】:2013-01-09 04:37:34 【问题描述】:

可能重复:get_instance() in Codeigniter: Why assign it to a variable?

我有一个控制器,它有很多功能,我想将它们分成不同的 cmd 对象。但是在控制器中,我可以使用$this 魔术,例如,我可以这样调用:

$this->form_validation->run('myAction');

但是当我将此代码移动到一个不是控制器的对象时,我这样调用函数:

    $CI =& get_instance();
    $CI->form_validation->run('myAction');

我意识到他们可以运行,结果正是我想要的。但是,我的问题是,这两个操作或代码有什么不同吗?里面的get_instance()黑魔法是什么?控制器的$this 指的是同一个get_instance() 吗?谢谢。

【问题讨论】:

根据这里给出的答案,我敢说它们是相同的[1]:***.com/questions/2819435/codeigniter-get-instance 从名称本身 get_instance() 一个已初始化的类的实例。 $this 指的是扩展核心控制器 CI_Controller 时加载的方法 【参考方案1】:

使用$ci = &get_instance(),您是在直接使用codeigniter 本机库,而不是对其进行复制。 “$this”命令只能在控制器内部使用,因此将 CI 对象分配给变量是进入控制器外部 Ci 核心库的唯一方法。请注意,模型中的“$this”命令指的是模型对象本身。

【讨论】:

以上是关于在 codeigniter 中调用 $CI 和使用 `this` 有啥不同吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在CodeIgniter中调用未定义的方法CI_DB_mysqli_result :: where()

021.CI4框架CodeIgniter, 通过命名空间调用其它目录中的Controller控制器文件

在Codeigniter中调用未定义的方法CI_DB_odbc_driver :: limit()

CI-CodeIgniter中“超级对象”:$CI =& get_instance()

012.CI4框架CodeIgniter, 加载并调用自己的Libraries库

集成/迁移两个 CodeIgniter 应用程序。