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的FTP学习(四)
Oct 09 PHP
php中处理模拟rewrite 效果
Dec 09 PHP
利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法
Dec 19 PHP
浅析PKI加密解密 OpenSSL
Jul 01 PHP
利用yahoo汇率接口实现实时汇率转换示例 汇率转换器
Jan 14 PHP
分享最受欢迎的5款PHP框架
Nov 27 PHP
PHP中使用curl入门教程
Jul 02 PHP
CodeIgniter扩展核心类实例详解
Jan 20 PHP
php结合md5的加密解密算法实例
Sep 30 PHP
PHP7基于curl实现的上传图片功能
May 11 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
Jun 13 PHP
Laravel学习笔记之Artisan命令生成自定义模板的方法
Nov 22 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
php 中英文语言转换类代码
2011/08/11 PHP
简单的PHP缓存设计实现代码
2011/09/30 PHP
php curl选项列表(超详细)
2013/07/01 PHP
PHP中批量生成静态html(命令行下运行PHP)
2014/04/19 PHP
网站防止被刷票的一些思路与方法
2015/01/08 PHP
php getcwd与dirname(__FILE__)区别详解
2016/09/24 PHP
微信 getAccessToken方法详解及实例
2016/11/23 PHP
PHP异步进程助手async-helper
2018/02/05 PHP
js点击页面其它地方将某个显示的DIV隐藏
2012/07/12 Javascript
js根据日期判断星座的示例代码
2014/01/23 Javascript
浅析jQuery Ajax请求参数和返回数据的处理
2016/02/24 Javascript
用js控件div的滚动条,让它在内容更新时自动滚到底部的实现方法
2016/10/27 Javascript
require.js+vue开发微信上传图片组件
2016/10/27 Javascript
基于angular2 的 http服务封装的实例代码
2017/06/29 Javascript
JS图片轮播与索引变色功能实例详解
2017/07/06 Javascript
js学习总结_选项卡封装(实例讲解)
2017/07/13 Javascript
jfinal与bootstrap的登出实战详解
2017/11/27 Javascript
在pycharm中开发vue的方法步骤
2020/03/04 Javascript
[50:20]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第四局
2016/03/06 DOTA
对Python3 pyc 文件的使用详解
2019/02/16 Python
使用python实现ftp的文件读写方法
2019/07/02 Python
python代码 FTP备份交换机配置脚本实例解析
2019/08/01 Python
使用pandas 将DataFrame转化成dict
2019/12/10 Python
解决TensorFlow程序无限制占用GPU的方法
2020/06/30 Python
html5 canvas绘制放射性渐变色效果
2018/01/04 HTML / CSS
德国汽车零件和汽车配件网上商店:kfzteile24
2018/11/14 全球购物
雅诗兰黛澳大利亚官网:Estée Lauder澳大利亚
2019/05/31 全球购物
护理自我鉴定范文
2013/10/06 职场文书
贷款委托书范本
2014/04/08 职场文书
工厂车间标语
2014/06/19 职场文书
2014年小学生教师节演讲稿范文
2014/09/10 职场文书
2014年党员自我剖析材料
2014/10/07 职场文书
2014年服装销售工作总结
2014/11/27 职场文书
超市采购员岗位职责
2015/04/07 职场文书
初中生物教学随笔
2015/08/15 职场文书
Python万能模板案例之matplotlib绘制直方图的基本配置
2022/04/13 Python