创建类库和使用原生类库

1、存储位置

你的类库文件应该放置在 application/libraries 目录下,当你初始化类时,CodeIgniter 会在这个目录下寻找这些类

2、命名约定

  • 文件名首字母必须大写,例如:Myclass.php
  • 类名定义首字母必须大写,例如:class Myclass
  • 类名和文件名必须一致

3、类文件原型

defined('BASEPATH') OR exit('No direct script access allowed');
class Myclass {public function some_method(){}
}

4、使用自定义类(控制器)

// 加载类
$this->load->library('myclass');
// 使用类方法
$this->myclass->some_method();

5、使用自定义类传参

$params = array('type' => 'large', 'color' => 'red');
$this->load->library('Myclass', $params);
defined('BASEPATH') OR exit('No direct script access allowed');
class Myclass {public function __construct($params){// Do something with $params}
}

6、自定义类中使用 CodeIgniter 资源

class Example_library
{protected $CI;public function __construct(){$this->CI =& get_instance();}public function foo(){$this->CI->load->helper('url');redirect();}public function bar(){echo $this->CI->config->item('base_url');}
}

(1)$this 只能在控制层、模型或视图中直接使用

(2)$CI =& get_instance(); 将 原始的 CodeIgniter 对象 赋值 给变量 $CI ,而不是创建一个副本

7、替换原生类库

// 替换原生的 Email 类 在 application/libraries/Email.php 创建
class CI_Email
{}
$this->load->library('email');

类库文件和类定义改成和原生的类库完全一样

注意大多数原生类都以 CI_ 开头

8、扩展原生类库

class My_Email extends CI_Email
{}

扩展一个类和替换一个类差不多,除了以下几点:

  • 类在定义时必须继承自父类
  • 你的新类名和文件名必须以 MY_ 为前缀 ( 可配置,见下文 )

如果在扩展原生类时需要使用构造函数,需确保你调用了父类的构造函数

class MY_Email extends CI_Email
{public function __construct($config = array()){parent::__construct($config);}
}

并不是所有的类库构造函数的参数都是一样的,在对类库扩展之前 先看看它是怎么实现的

加载扩展类

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

和平常调用原生库一样

9、设置自定义前缀

application/config/config.php 文件

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

请注意所有原始的 CodeIgniter 类库都以 CI_ 开头,所以请不要使用这个 作为你的自定义前缀

Codeigniter3学习笔记三(创建类库及使用原生类库)相关推荐

  1. openstack学习笔记三 创建第一个实例

    登陆admin 创建一个基本网络 镜像   已经安装好操作系统的硬盘文件 计算--镜像--创建镜像 名称  centos7.2-1511 镜像源  镜像地址 镜像地址    http://mirror ...

  2. ROS学习笔记三:创建ROS软件包

    ,# ROS学习笔记三:创建ROS软件包 catkin软件包的组成 一个软件包必须满足如下条件才能被称之为catkin软件包: 这个软件包必须包含一个catkin编译文件package.xml(man ...

  3. 【AngularJs学习笔记三】Grunt任务管理器

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# AngularJs学习笔记 [AngularJs学习笔记一]Bower解决js的依赖管理 [AngularJs学习笔 ...

  4. iView学习笔记(三):表格搜索,过滤及隐藏列操作

    iView学习笔记(三):表格搜索,过滤及隐藏某列操作 1.后端准备工作 环境说明 python版本:3.6.6 Django版本:1.11.8 数据库:MariaDB 5.5.60 新建Django ...

  5. spring学习笔记02-spring-bean创建的细节问题

    spring学习笔记02-spring-bean创建的细节问题 三种创建Bean对象的方式 Bean的作用范围 Bean的生命周期 <?xml version="1.0" e ...

  6. Mr.J-- jQuery学习笔记(三十二)--jQuery属性操作源码封装

    扫码看专栏 jQuery的优点 jquery是JavaScript库,能够极大地简化JavaScript编程,能够更方便的处理DOM操作和进行Ajax交互 1.轻量级 JQuery非常轻巧 2.强大的 ...

  7. JavaScript学习笔记:创建、添加与删除节点

    JavaScript学习笔记:创建.添加与删除节点 文章目录 JavaScript学习笔记:创建.添加与删除节点 一.DOM对象节点类型 二.创建节点 1.创建元素节点 2.创建文本节点 3.创建属性 ...

  8. Python学习笔记三之编程练习:循环、迭代器与函数

    Python学习笔记三之编程练习 1. 编程第一步 # 求解斐波纳契数列 #/user/bin/python3#Fibonacci series:斐波那契数列 #两个元素的总和确定了下一个数 a,b= ...

  9. python3常用模块_Python学习笔记三(常用模块)

    Python 学习笔记三 (常用模块) 1.os模块 os模块包装了不同操作系统的通用接口,使用户在不同操作系统下,可以使用相同的函数接口,返回相同结构的结果. os.name:返回当前操作系统名称( ...

  10. K8S 学习笔记三 核心技术 Helm nfs prometheus grafana 高可用集群部署 容器部署流程

    K8S 学习笔记三 核心技术 2.13 Helm 2.13.1 Helm 引入 2.13.2 使用 Helm 可以解决哪些问题 2.13.3 Helm 概述 2.13.4 Helm 的 3 个重要概念 ...

最新文章

  1. tesseract-ocr3.02字符识别过程操作步骤
  2. 人工智能正在激活互联网类脑系统,2018年,云脑将成为新热点
  3. Jupyter notebook 运行环境创建和切换 (Win10+Anaconda)
  4. MongoDB系列:五、MongoDB Driver使用正确的姿势连接复制集
  5. z-blog php 静态设置,Nginx的Z-Blog的伪静态配置方法
  6. JavaScript学习总结(2)——JavaScript数据类型判断
  7. 深入浅出 Python Iterators 迭代器
  8. idea 中 配置tomcat 启动 jsp项目
  9. 一次让你搞懂Android应用签名
  10. linux系统发育树的构建步骤,步一步教你如何做系统进化树
  11. 同个网络找不到计算机打印机共享,局域网共享打印机搜索不到怎么办 局域网共享打印机搜索不到解决方法...
  12. 主动降噪python_主动降噪(Active Noise Control)
  13. 【学术相关】过来人对研究生阶段的学习建议
  14. 数论之费马大定理及怀尔斯的证明
  15. Linux 只查找两层备份目录文件大小
  16. VMware 笔试题目:猫和老鼠玩象棋
  17. 618啦,你的钱包又被盯上啦!
  18. Node.js 获取本机Mac地址
  19. spreadtrum展信平台加密Secure boot流程
  20. Linux进程的概念

热门文章

  1. 常用的DOS功能输入输出
  2. 51Nod 1182
  3. oracle和mysql数据实时同步_Canal 实现 Mysql数据库实时数据同步
  4. Wannafly挑战赛26 A B
  5. zencart手工备份mysql数据库_MySQL数据库镜像 / 实时备份Zen Cart数据库
  6. 服务器显示AL024是什么意思,云端时代云终端快速部署指南(S11AL).ppt
  7. mysql常见排错_mysql 一些排错技巧
  8. java可以用var定义吗_浅析java 10中的var关键字用法
  9. qq视频转码失败怎么办_qq影音为什么不能转码 进行视频转码方法
  10. linux 动态链接库 函数共享,LINUX动态链接库高级应用(etc/ld.so.conf)共享动态链接库...