通过CodeIgniter快速开发Web应用(自定义类库)

来源:互联网 发布:速干运动短裤 淘宝 编辑:程序博客网 时间:2024/06/06 17:43

1、使用CI自带类库:

CI所有的系统类库都位于 system/libraries/ 目录下,使用时,只需在控制器中初始化:

$this->load->library('email'); //这里初始化了email类库

TIPS:可同时加载多个类库:

$this->load->library(array('email', 'validate'));

2、创建并使用自己的类库:

(1)、你的类库文件应该放置在 application/libraries 目录下,当你初始化类时,CodeIgniter 会在这个目录下寻找这些类。
(2)、命名:文件名首字母必须大写:Fake.php;类名:首字母必须大写且与文件名一致:class Fake{};
例子:

<?phpdefined('BASEPATH') OR exit('No direct script access allowed');class Fake{    public function getid()    {    }}

(3)、定义好了就开始使用:在你的 控制器任何方法中使用如下代码初始化你的类:

$this->load->library('fake');  //fake为你的类库文件名,但不包括.php

文件名可以写成首字母大写, 也可以写成全小写,CodeIgniter 都可以识别。
加载完类库后,你就可以使用小写字母名称来访问你的类:

$this->fake->getid();

(4)、初始化类时传入参数的用法:
加载类库时,使用第二个参数传递一个数组数据,数据将传到你的类的构造函数中,如:

$this->load->library('fake', ['数组','数据']);

如果你加了参数,那么你必须在类库的构造函数里加上参数:

<?php defined('BASEPATH') OR exit('No direct script access allowed');class Fake{    public function __construct($data)    {        //用你传过来的数据在构造函数里做点事    }}

(5)、在自己的类库中使用CI的资源:
首先在你的类库中使用 get_instance() 函数来访问 CodeIgniter 的原生资源,这个函数返回 CodeIgniter 超级对象。
但是 $this 只能在你的控制器、模型或视图中 直接使用,如果你想在你自己的类中使用 CodeIgniter 类,你可以像下面这样做:

$CI =& get_instance();$CI->load->helper('url');$CI->load->library('session');$CI->config->item('base_url');

上面的 get_instance() 函数通过引用来传递:$CI =& get_instance();

既然这样,我们可以直接创建成员来在我们的类库中全局调用CI的资源:

class Example_library {    protected $CI;    public function __construct()    {        $this->CI =& get_instance();        //构造方法中直接拿到原生资源,在该类的所有方法里均可使用    }    public function foo()    {        $this->CI->load->helper('url');        redirect();    }}






以下为扩展,如果你想对原生类库做扩展,那么请继续阅读;

3、对原生类库的替换和扩展:

(6)、使用自己的类库替换原生类库:
将你的类文件名改为和原生的类库文件一致,CI就会使用它替换掉原生的类库。如:

class CI_Email {    //TIPS:大多数CI的原生类都以CI作为开头}

问题来了,如何加载我的这个覆盖原生类库的类库?注意,此时这个类库已经被你替换成了原生类库,因此要使用可以直接加载原生类库的方法:

$this->load->library('email'); //TIPS:这里没有CI_,因为是以原生类库的方式加载

TIPS:注意数据库类不能被你自己的类替换掉。

(7)、扩展原生类库:只想扩展几个小功能,而并不想自己建一个类库(因为调用时加载写的代码太麻烦),也不想直接覆盖原生类库;

扩展需要做的前置工作:

  • 类在定义时必须继承自父类。
  • 新类名和文件名必须以 MY_ 为前缀。

扩展原生的 Email 类,新建一个文件命名为 application/libraries/MY_Email.php , 然后定义该类:

class MY_Email extends CI_Email {   //继承}

application/config/config.php 文件, 找到这项:$config['subclass_prefix'] = 'MY_';

以上前置工作做好后即可使用扩展类库;




TIPS:如果你需要使用构造函数,那么必须保证你继承了父类(才能叫做扩展,否则原生类的功能无法使用);

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

TIPS:并不是所有的类库构造函数的参数都是一样的,在对类库扩展之前 先看看它是怎么实现的。
加载扩展类(扩展类还是属于原生类的基础上扩展,因此加载方式与原生相同):

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

访问扩展类:$this->email->方法();

阅读全文
0 0