CodeIgniter扩展核心类实例详解


Posted in PHP onJanuary 20, 2016

本文实例讲述了CodeIgniter扩展核心类的方法。分享给大家供大家参考,具体如下:

CI中对核心类、辅助类和函数的扩展是相当方便的,配置文件中指定了subclass_prefix扩展前缀,默认为MY_,扩展时需要以该配置为前缀,下面整理下扩展方式。

1、扩展核心类

核心类位于system/core下,其中大部分类会在初始化的时候自动加载。扩展核心类的方式有两种:替换核心类和继承核心类。

替换核心类

当application/core目录下存在与system/core同名的文件时会自动替换掉核心类。以Loader.php为例,当创建application/core/Loader.php后会自动加载该类,由于该类为系统核心类,所以,如果Loader.php未实现CI_Loader类中的方法则会报错,如:

class CI_Loader
{
  ...
}

替换核心类需要重写其中的所有方法,以免影响核心功能。但大部分时候并不需要重写整个核心,基本上只是增加某些方法,这个时候可以采取继承的方式。

继承核心类

继承核心类需要以subclass_prefix为前缀,如扩展Input类,需创建application/core/MY_Input.php,并且MY_Input需要继承CI_Input类,如:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Input extends CI_Input
{
  function _clean_input_keys($str)
  {
    $config = &get_config('config');
    if ( ! preg_match("/^[".$config['permitted_uri_chars']."]+$/i", rawurlencode($str))) {
      exit('Disallowed Key Characters.');
    }
    // Clean UTF-8 if supported
    if (UTF8_ENABLED === TRUE) {
      $str = $this->uni->clean_string($str);
    }
    return $str;
  }
}
/* End of file MY_Input.php */
/* Location: ./application/core/MY_Input.php */

2、扩展CI类库

system/libraries下实现了一些辅助类,当有需要扩展这些类时,和核心类的处理方式是一样的,只不过目录变成了application/libraries

3、扩展辅助函数

辅助函数存放于application/helpers目录下,辅助函数的“继承”方式与上面相同。因为CI的辅助函数都有使用function_exists来判断是否存在,所以也可以达到“重写”的目的。如在array中新增一个数组排序方法:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 * 对二维数组进行排序
 * 
 * @param array $data 需要排序的字段
 * @param array $sort_field 按哪个键进行排序,如果不是所有键中都含有该字段则返回原数组
 * @param array $sort_type 排序方式 SORT_ASC 升序 SORT_DESC 降序
 * @return array
 */
function array_field_sort($data, $sort_field, $sort_type = SORT_ASC)
{
  if(! is_array($data)) {
    return false;
  }
  $sort_arr = array();
  foreach($data as $key => $val) {
    if(isset($val[$sort_field])) {
      $sort_arr[$key] = $val[$sort_field];
    }
  }
  if(count($sort_arr) == count($data)) {
    array_multisort($sort_arr, $sort_type, $data);
  }
  return $data;
}
/* End of file MY_array_helper.php */
/* Location: ./application/helpers/MY_array_helper.php */

总的来说,可以对CI框架system目录下的大部分内容进行重写,灵活度很高,扩展也很方便。但有时候也需要注意一下,并不是扩展的越多就越好,确保CI实现不了的功能再去扩展。最后既然CI提供了扩展的功能,就不要直接去修改system下的内容了。

希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP通过COM使用ADODB的简单例子
Dec 31 PHP
PHP的分页功能
Mar 21 PHP
php数组函数序列之end() - 移动数组内部指针到最后一个元素,并返回该元素的值
Oct 31 PHP
PHP人民币金额数字转中文大写的函数代码
Feb 27 PHP
PHP中的插件机制原理和实例
Jul 08 PHP
php实现读取手机客户端浏览器的类
Jan 09 PHP
php绘图之生成饼状图的方法
Jan 24 PHP
PHP实现动态柱状图改进版
Mar 30 PHP
PHP人民币金额转大写实例代码
Oct 02 PHP
Yii2.0中使用js异步删除示例
Mar 10 PHP
Laravel自动生成UUID,从建表到使用详解
Oct 24 PHP
php接口隔离原则实例分析
Nov 11 PHP
CodeIgniter视图使用注意事项
Jan 20 #PHP
CodeIgniter读写分离实现方法详解
Jan 20 #PHP
PHP实现微信网页授权开发教程
Jan 19 #PHP
CodeIgniter配置之SESSION用法实例分析
Jan 19 #PHP
CodeIgniter配置之routes.php用法实例分析
Jan 19 #PHP
CodeIgniter配置之config.php用法实例分析
Jan 19 #PHP
Codeigniter控制器controller继承问题实例分析
Jan 19 #PHP
You might like
第五节--克隆
2006/11/16 PHP
PHP简单实现文本计数器的方法
2016/04/28 PHP
PHP批量获取网页中所有固定种子链接的方法
2016/11/18 PHP
PHP Laravel中的Trait使用方法
2019/01/20 PHP
select、radio表单回显功能实现避免使用jquery载入赋值
2013/06/08 Javascript
jquery修改网页背景颜色通过css方法实现
2014/06/06 Javascript
基于jquery固定于顶部的导航响应浏览器滚动条事件
2014/11/02 Javascript
Javascript 是你的高阶函数(高级应用)
2015/06/15 Javascript
jquery制做精致的倒计时特效
2016/06/13 Javascript
jQuery表单验证简单示例
2016/10/17 Javascript
微信小程序 设置启动页面的两种方法
2017/03/09 Javascript
bootstrap时间插件daterangepicker使用详解
2017/10/19 Javascript
微信小程序拍照和摄像功能实现方法示例
2019/02/01 Javascript
Jquery让form表单异步提交代码实现
2019/11/14 jQuery
[02:36]DOTA2英雄基础教程 一击致命幻影刺客
2013/12/06 DOTA
Python深入学习之装饰器
2014/08/31 Python
python中MySQLdb模块用法实例
2014/11/10 Python
Python模拟登录12306的方法
2014/12/30 Python
Python模拟用户登录验证
2017/09/11 Python
Python基于socket实现简单的即时通讯功能示例
2018/01/16 Python
对Python中for复合语句的使用示例讲解
2018/11/01 Python
django和vue实现数据交互的方法
2019/08/21 Python
python中几种自动微分库解析
2019/08/29 Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
2020/04/02 Python
Python importlib模块重载使用方法详解
2020/10/13 Python
python 中关于pycharm选择运行环境的问题
2020/10/31 Python
lookfantastic荷兰:在线购买奢华护肤、护发和化妆品
2018/11/27 全球购物
应届生新闻编辑求职信
2013/11/19 职场文书
cf搞笑广告词
2014/03/14 职场文书
协议书样本
2014/04/23 职场文书
环保建议书500字
2014/05/14 职场文书
投标保密承诺书
2014/05/19 职场文书
2015学校年度工作总结
2015/05/11 职场文书
故意伤害辩护词
2015/05/21 职场文书
三下乡活动心得体会
2016/01/23 职场文书
2016简单的租房合同范本
2016/03/18 职场文书