http://codeigniter.org.cn/user_guide/general/creating_libraries.html

创建类库

当我们使用术语"类库"时,我们一般指的是位于libraries 文件夹中的类,它们在wiki的"类库参考"这个板块被讨论.在当前这个话题中,我们将讨论如何在 application/libraries 文件夹中建立你自己的类库,并使它们与全框架的资源维持分离.

作为一个额外的功能,当你需要在原始类中简单地添加一些功能时,CodeIgniter能使你的类库extend 自原始类.你甚至可以通过在application/libraries文件夹下安放同名类库文件的方法来完全替换原始类.

总之:

  • 你可以创建全新的类库.
  • 你可以扩展原始类库.
  • 你可以替换原始类库.

以下页面将深入介绍这三个概念.

注意: 除了数据库类无法被扩展或替换,剩余其他类均可。

建立你的类库文件

你的类库文件必须保存在 application/libraries 文件夹,CodeIgniter将在这个文件夹中寻找并初始化它们.

命名约定

  • 文件名首字母大写. 例如:  Myclass.php
  • 类声明首字母大写. 例如:  class Myclass
  • 类的名字和文件名应相同.

类文件

所有的类应有基础原型(注意,这里我们以 Someclass 这个名字为例):

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

class Someclass {

public function some_function()
    {
    }
}

/* End of file Someclass.php */

使用你自己的类

在所有的Controller 函数中,你可以用以下的标准方式初始化你的类:

$this->load->library('someclass');

当 someclass 是文件名时,不用加上".php"扩展名.这里名字不分大小写.

一旦你自定义的类加载完毕,你可以通过以下方式调用类,注意使用 小写 的名字:

$this->someclass->some_function();  // 对象的实例名永远都是小写的

在初始化自定义类时传递参数

当初始化类库时,你可以通过第二个参数动态的传递数组到类的构造函数中去:

$params = array('type' => 'large', 'color' => 'red');

$this->load->library('Someclass', $params);

当你使用这个特性时,你必须为类的构造函数加上参数:

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

class Someclass {

public function __construct($params)
    {
        // Do something with $params
    }
}

?>

你也可以传递存于配置文件中的参数.你只需简单的建立一个与 类文件名相同的config文件,并保存在 application/config/ 文件夹中.注意当你通过上文所述的方式动态传递参数时,config文件中的选项将不起作用.

在你自定义的类库中初始化CodeIgniter资源

要在你自定义的类库中访问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 对象,而不是创建一个副本。

用你自己的类替换原始类

简单的将你自己的类命名为与原始类一样就能使CodeIgniter使用这个新类.要使用这个特性,文件名与类声明必须与原始类完全一致。例如,要替换原始的 Email 类库。你必须创建一个文件application/libraries/Email.php, 并按如下方式声明类:

class CI_Email {

}

注意大多数原始类以CI_为前缀.

你可以只用标准载入函数来载入你自己的类:

$this->load->library('email');

注意: 这个时候Database无法替换为你自定义的类.

扩展现有类

如果你需要在现有类库中加入一两个新的功能,那就完全不必要替换整个类库文件.你只需简单地扩展(继承)现有的类,扩展一个类就像在类中增加一些例外:

  • 扩展的类必须申明由父类扩展而来.
  • 新扩展的类所在的文件必须以 MY_ 为前缀(这个选项是可配置的,下面有说明).

例如,要扩展原始类 Email 类你要建立文件 application/libraries/MY_Email.php, 并按如下方式在文件中声明:

class MY_Email extends CI_Email {

}

注意:如果你需要在类中使用构造函数,你必须在构造函数中显式继承父类构造函数:

class MY_Email extends CI_Email {

public function __construct()
    {
        parent::__construct();
    }
}

载入你的子类

要载入扩展子类,你应该使用标准字符名. 请不要使用前缀. 例如,要载入上文说过的email扩展子类,你应该这样写:

$this->load->library('email');

扩展子类一旦被载入,就能像一般的类一样使用它们. Email类中的所有函数就能被调用:

$this->email->some_function();

设定自定义前缀

要设定你自己的子类前缀,请打开 application/config/config.php 文件并找到这一项:

$config['subclass_prefix'] = 'MY_';

注意所有原始CodeIgniter类库以 CI_ 作为前缀,所以请勿以CI_作为你自己的前缀

转载于:https://www.cnblogs.com/songyanan/p/9262210.html

CI中创建你自己的类库相关推荐

  1. codeigniter中创建自己的类库

    2019独角兽企业重金招聘Python工程师标准>>> 当我们使用术语"类库"时,我们一般指的是位于libraries 文件夹中的类,它们在wiki的" ...

  2. OpenShift 4 - 在 CI/CD Pipeline 中创建 KubeVirt 容器虚拟机 - 方法1+2 (视频)

    <OpenShift / RHEL / DevSecOps 汇总目录> 说明:本文已经在支持 OpenShift 4.12 的 OpenShift 环境中验证 文章目录 准备环境 安装可实 ...

  3. php ci captcha使用,CodeIgniter框架验证码类库文件与用法示例

    本文实例讲述了CodeIgniter框架验证码类库文件与用法.分享给大家供大家参考,具体如下: 折腾了我四五个小时,终于,ci的验证码类库成功的整出来了. 下面请看源码: 在application/l ...

  4. 【译】在ASP.NET中创建PDF-iTextSharp起步

    .Net framework 中自身并不包含可以和pdf打交道的方法.所以,当你需要你的ASP.Net Web应用程序中包含创建或与PDF文件交互的部分时,就不得不去找可用的第三方组件.使用谷歌可以搜 ...

  5. C#中创建DLL(动态链接库)及其使用

    一.DLL 与应用程序 动态链接库(也称为 DLL ,即为" Dynamic Link Library "的缩写)是 Microsoft Windows 最重要的组成要素之一,打开 ...

  6. [codeigniter]CI中使用pChart绘制图表,已测通过

    因为一个codeigniter开发的项目上要用到图表.FusionChart是flash技术,在某些情况下可能造成无法使用(如ipad).因此不禁想起了之前用Pchart做的图表项目. 但是毕竟是在C ...

  7. python在什么系统中开发_Python虚拟开发环境,怎样才能在系统中创建

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 以下文章来源于python 青少年编程 ,作者python expert 今天小 ...

  8. C#中创建、打开、读取、写入、保存Excel的一般性代码

    1 Excel对象 微软的Excel对象模型包括了128个不同的对象,从矩形,文本框等简单的对象到透视表,图表等复杂的对象.下面我们简单介绍一下其中最重要,也是用得最多的四个对象. (1) Appli ...

  9. windows系统中创建线程常用哪几个函数,有什么区别?

    windows系统中创建线程常用哪几个函数? 在windows系统中创建线程的函数有: CreadThread,AfxBeginThread,_beginthread,_beginthreadex. ...

最新文章

  1. UC伯克利博士尤洋回国创业,曾刷新ImageNet纪录!已获超千万融资
  2. Howto: (Almost) Everything In Active Directory via C#
  3. 民生银行 IT运维故障管理 可视化案例
  4. python利用numpy创建数组(等比,等差,空数组,1数组)
  5. apollo分布式配置中心原理
  6. SAP Commerce Cloud,通过 ycommercewebservices OCC APIs 进行结账的一个技术限制
  7. 判断不为空和不为空串的方法java
  8. 事务模型与分布式事务总结思考
  9. 从零开始学视觉Transformer (8):卷积和Transformer结合的ViT
  10. python模拟浏览器下载文件在哪里_python下selenium模拟浏览器基础操作
  11. tomcat中server.xml文件解析
  12. 关于王者荣耀防沉迷以及各种实名认证
  13. 百度开源的 71 个项目,你用过几个 ?
  14. MENTOR 安装过程
  15. sin30度用c语言转换弧度制,【数学】弧度和角度的转换
  16. 【分享】哪个OS X版本支持哪个Xcode的版本?
  17. python软件要钱吗-python语言是免费还是收费的?
  18. html表头纵向,网页表格之---多个表格纵向排列
  19. Docker架构部署及镜像制作,免费容器云体验
  20. 华为过程可信cib是指_华为EMUI10取消IMEI?数字联盟可信ID——更可靠的移动设备唯一标识...

热门文章

  1. 中子穿墙问题的MonteCarlo求解方法
  2. 机器人仿真技术学习笔记(一)
  3. dart语言中的常量与变量
  4. android 实现蓝牙自动配对连接,Android实践 -- Android蓝牙设置连接
  5. 最短路计数(松弛操作处理)
  6. AcWing 889. 满足条件的01序列(卡特兰数)
  7. php class variable,PHP中的變量類擴展 - 是否可能?
  8. 对接生态:Logstash 接入日志服务
  9. Swift基础语法学习-4.Bool类型
  10. 初次安装Mysql5.7以上版本后初始root密码找不到的问题