*** $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的别名,而不要发送或复制快捷方式到其他地方而产生快捷方式的复制?
随机推荐
- mybatis generator.xml 配置 自动生成model,dao,mapping
generator.xml文件: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE gener ...
- Python 编码简单说
先说说什么是编码. 编码(encoding)就是把一个字符映射到计算机底层使用的二进制码.编码方案(encoding scheme)规定了字符串是如何编码的. python编码,其实就是对python ...
- iframe的sandbox使用
sandbox:限制iframe的权限,解决安全性问题. 定义 如果被规定为空字符串(sandbox=""),sandbox 属性将会启用一系列对行内框架中内容的额外限制.sand ...
- supermap布局设定地图网格及布局网格
地图网格设定 LayoutElements elements = m_mapLayoutControl.MapLayout.Elements; //构造GeoMap GeoMap geoMap = n ...
- UP Board 妄图启动ubilinux失败
前言 原创文章,转载引用务必注明链接. 经历了上次的上电开机失败,我们终于发现需要手动为UP板安装系统,因为没有显示器的Headless模式时,使用Linux比较方便,另外熟悉Debian系的,所以选 ...
- [Android]ListView学习笔记
基本用法流程 创建Adapter并且派生自BaseAdapter,实现其必要的接口方法 将创建的Adapter分配给ListView对象:mPhoneBookListView.setAdapter(p ...
- CSS3多列/多卷
使用CSS3可以为你的网站创建多列,而不用为每列制定特定的层或段落. 与多背景图片一样,CSS3多列也是我最喜爱的一个技术.我想这条CSS3属性有在报纸和杂志布局中以外的很多潜在的用途.如果你在某个想 ...
- 分页型Memory LCD显存管理与emWin移植
上一篇随笔整理了一下逐行扫描型Memory LCD的显存管理与emWin移植,这篇就整理一下分页型Memory LCD显存管理与emWin移植. //此处以SSD1306作为实例 //OLED的显存/ ...
- #pragma once与#ifndef #define ...#endif的区别
1. #pragma once用来防止某个头文件被多次include: #ifndef,#define,#endif用来防止某个宏被多次定义. 2. #pragma once是编译相关,就是说这个 ...
- HTML5的浏览器支持方案
现代的浏览器基本都支持 HTML5,此外还有老浏览器. 不管是旧的还是最新的,HTML5对无法识别的元素会作为内联元素自动处理. 所以,在这里教大家怎么让浏览器去处理"未知"的HT ...