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的别名,而不要发送或复制快捷方式到其他地方而产生快捷方式的复制?

  • 相关阅读:
    转载 Markdown 写法 直接考代码 反正博客园支持
    最全的ADB命令行大全(转)
    Python 帮你玩微信跳一跳 GitHub Python脚本
    React中setState的怪异行为 ——setState没有即时生效
    详解es6中Proxy代理对象的作用
    react-router和react-router-dom的区别
    webpack4 Cannot find module '@babel/core'
    vue-devtools的安装与使用
    Vuex的mapGetters方法使用报错
    vuex直接修改state 与 用commit提交mutation来修改state的差异
  • 原文地址:https://www.cnblogs.com/qingsong/p/12235621.html
Copyright © 2011-2022 走看看