• **CI创建类库(创建自己的工具类等)


    创建类库

    当我们使用术语"类库"时,我们一般指的是位于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_作为你自己的前缀.

  • 相关阅读:
    CSS的选择符
    小例子分析C#继承机制
    socket服务端(.net)代码
    分页代码
    web.config的数据库连接字符串写法与取法
    怎么提高网站速度,对于大访问量网站如何对网站进行优化
    方维分享系统二次开发, 给评论、主题、回复、活动 加审核的功能
    方维分享系统修改,本地安装失败,后台无法登陆
    方维分享系统修改,后台一键更新缓存
    方维分享系统 第三方登录appkey申请
  • 原文地址:https://www.cnblogs.com/kenshinobiy/p/4340230.html
Copyright © 2020-2023  润新知