zoukankan      html  css  js  c++  java
  • *** $CI =& get_instance() 用法:关于CodeIgniter中get_instance() 函数

     使用场景:

    注意 get_instance 的使用场景,这个方法并不是用在控制器中的。
    而是用在控制器外面,比如类库中,想操作 CI 超级对象的时候,超级对象实际上就是当前控制器的实例。


    你随便下个CI框架的源码都会看到很多的get_instance() 函数,这个函数是用来获取CI 的全局超级对象,CI 是单例模式的框架,所有全局有一个超级对象。因为只有一个实例,所以无论这个函数使用多少次都不会消耗资源的。一般来说,只有在helper或library中才使用get_instance。

    以前我们都是这样用的:$this->load->library('session');

    $this只作用在你自己的控制器、模型、视图中,如果你在自定义的类中也想使用CI的函数话,你就可以这样做:

    //通过引用的方式赋给变量将使用原始的 CodeIgniter 对象

    $ci = &get_instance();

    //这样就可以使用ci的函数了

    $ci->load->library('session');


    要你自定义的类库中访问CodeIgniter的原始资源,你必须使用 get_instance() 函数.这个函数返回一个CodeIgniter super object.

    一般来说在你的控制器函数中你可以通过 $this 调用任何可用的CodeIgniter函数:

    $this->load->helper('url');
    $this->load->library('session');
    $this->config->item('base_url');
    etc. 
    $this, 只直接作用在你自己的控制器,模型和视图中.当你在自定义类中想使用CodeIgniter原始类时,你可以这样做:

    首先,定义CodeIgniter对象赋给一个变量:

    $CI =& get_instance();

    一旦定义某个对象为一个变量,你就可以使用那个变量名 取代 $this:

    $CI =& get_instance();

    $CI->load->helper('url');
    $CI->load->library('session');
    $CI->config->item('base_url');
    etc. 
    注意: 你将注意到get_instance()这个函数通过被引用的方式被传递:

    $CI =& get_instance(); 

    这十分重要. 通过引用的方式赋给变量将使使用原始的CodeIgniter对象,而不是创建一个拷贝 

    同时,请注意: 如果你使用php 4,那么请最好不要在类的构造函数中调用 get_instance() .php4在引用位于构造函数中的CI super object时存在问题,因为对象只有在类完全实例化后才存在.


    对于"CI官方手册说调用get_instance()函数时,要用&引用符号;原因是为了防止对象生成副本"这一句里面的"防止对象生成副本",类比Unix中的硬链接、软链接,是不是就是防止生成软链接,就像windows中的,只生成某个软件的启动exe的别名,而不要发送或复制快捷方式到其他地方而产生快捷方式的复制?

  • 相关阅读:
    第一阶段意见评论
    《大道至简》阅读笔记03
    大二下第十二周学习笔记
    《大道至简》阅读笔记02
    课上练习—单词统计
    大二下第十一周学习笔记
    《大道至简》阅读笔记01
    《人月神话》阅读笔记03
    大二下第十周学习笔记
    团队项目前期冲刺-10
  • 原文地址:https://www.cnblogs.com/kenshinobiy/p/6118047.html
Copyright © 2011-2022 走看看