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环境搭建最新方法
Sep 05 PHP
PHP版网站缓存加快打开速度的方法分享
Jun 03 PHP
ajax php传递和接收变量实现思路及代码
Dec 19 PHP
使用php+apc实现上传进度条且在IE7下不显示的问题解决方法
Apr 25 PHP
PHP5各个版本的新功能和新特性总结
Mar 16 PHP
php向js函数传参的几种方法
Aug 10 PHP
CodeIgniter使用smtp服务发送html邮件的方法
Jun 10 PHP
php异常处理方法实例汇总
Jun 24 PHP
PHP处理CSV表格文件的常用操作方法总结
Jul 01 PHP
php组合排序简单实现方法
Oct 15 PHP
PHP实现负载均衡的加权轮询方法分析
Aug 22 PHP
PHP Ajax跨域问题解决方案代码实例
Aug 01 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
smarty静态实验表明,网络上是错的~呵呵
2006/11/25 PHP
PHP 二维数组根据某个字段排序的具体实现
2014/06/03 PHP
php实现的ping端口函数实例
2014/11/12 PHP
经典PHP加密解密函数Authcode()修复版代码
2015/04/05 PHP
基于jquery的web页面日期格式化插件
2011/11/15 Javascript
jQuery中unbind()方法用法实例
2015/01/19 Javascript
jquery实现点击页面计算点击次数
2015/01/23 Javascript
JavaScript forEach()遍历函数使用及介绍
2015/07/08 Javascript
js实现带有介绍的Select列表菜单实例
2015/08/18 Javascript
轻松掌握JavaScript装饰者模式
2016/08/27 Javascript
Vue.js中用v-bind绑定class的注意事项
2016/12/13 Javascript
jQuery学习之DOM节点的插入方法总结
2017/01/22 Javascript
详解bootstrap的modal-remote两种加载方式【强化】
2017/01/27 Javascript
初识 Vue.js 中的 *.Vue文件
2017/11/22 Javascript
详解Angular结合zTree异步加载节点数据
2018/01/20 Javascript
详解Vuex下Store的模块化拆分实践
2019/07/31 Javascript
举例讲解Python编程中对线程锁的使用
2016/07/12 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
2017/11/14 Python
Python基于xlrd模块操作Excel的方法示例
2018/06/21 Python
python 3.3 下载固定链接文件并保存的方法
2018/12/18 Python
pygame实现烟雨蒙蒙下彩虹雨
2019/11/11 Python
Pycharm如何运行.py文件的方法步骤
2020/03/03 Python
html5 sessionStorage会话存储_动力节点Java学院整理
2017/07/06 HTML / CSS
慕尼黑山地运动、户外服装和体育用品专家:Sporthaus Schuster
2019/08/27 全球购物
SQL里面IN比较快还是EXISTS比较快
2012/07/19 面试题
毕业生物理教师求职信
2013/10/17 职场文书
高一学生评语大全
2014/04/25 职场文书
法制宣传日活动总结
2014/04/29 职场文书
优秀少先队大队辅导员事迹材料
2014/05/04 职场文书
服装仓管员岗位职责
2014/06/17 职场文书
大学生村官个人对照检查材料(群众路线)
2014/09/26 职场文书
产品调价通知函
2015/04/20 职场文书
2019年自助餐厅创业计划书模板
2019/08/22 职场文书
导游词之无锡华莱坞
2019/12/02 职场文书
CSS3 制作精美的定价表
2021/04/06 HTML / CSS
「魔法少女伊莉雅」美游粘土人开订
2022/03/21 日漫