本文实例讲述了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类,如:

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中新增一个数组排序方法:

/**

* 对二维数组进行排序

*

* @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相关内容感兴趣的读者可查看本站专题:《codeigniter入门教程》和《CI(CodeIgniter)框架进阶教程》

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

php ci 框架 扩展缓存类,CodeIgniter扩展核心类实例详解相关推荐

  1. python描述符(descriptor)、属性(property)、函数(类)装饰器(decorator )原理实例详解

    2019独角兽企业重金招聘Python工程师标准>>> 1.前言 Python的描述符是接触到Python核心编程中一个比较难以理解的内容,自己在学习的过程中也遇到过很多的疑惑,通过 ...

  2. python apscheduler 阻塞方式只用一个线程_框架APScheduler在python中调度使用的实例详解...

    本篇文章主要介绍了详解python调度框架APScheduler使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 最近在研究python调度框架APScheduler使 ...

  3. ueditor集成实例php,Laravel框架集成UEditor编辑器的方法图文与实例详解

    本文实例讲述了Laravel框架集成UEditor编辑器的方法.分享给大家供大家参考,具体如下: 一. 背景 在项目开发的过程中,免不了使用修改功能,而富文本编辑器是极为方便的一种推荐,当然,个人认为 ...

  4. struts2框架单文件、多文件上传实例详解

    版权声明:本文为博主原创文章,如需转载,请标明出处. https://blog.csdn.net/alan_liuyue/article/details/79390681 简介 1.上一篇博客讲解了J ...

  5. 【小白学PyTorch】扩展之Tensorflow2.0 | 21 Keras的API详解(下)池化、Normalization

    <<小白学PyTorch>> 扩展之Tensorflow2.0 | 21 Keras的API详解(上)卷积.激活.初始化.正则 扩展之Tensorflow2.0 | 20 TF ...

  6. python 录制web视频_Python django框架 web端视频加密的实例详解

    视频加密流程图: 后端获取保利威的视频播放授权token,提供接口api给前端 参考文档:http://dev.polyv.net/2019/videoproduct/v-api/v-api-play ...

  7. moviepy音视频剪辑:视频剪辑基类VideoClip的属性及方法详解

    ☞ ░ 前往老猿Python博文目录 ░ 一.概述 在<moviepy音视频剪辑:moviepy中的剪辑基类Clip详解>和<moviepy音视频剪辑:moviepy中的剪辑基类Cl ...

  8. USB CCID类协议中的APDU命令详解

    出处:http://blog.chinaunix.net/uid-29124653-id-4573075.html 原文地址:USB CCID类协议中的APDU命令详解 作者:jeffasdasd 最 ...

  9. Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    标签:读写分离 页面缓存 URL重写 Nginx 反向代理 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://freeloda.bl ...

最新文章

  1. futuretask使用_JDK源码分析-FutureTask
  2. arduino nano 蓝牙_用Arduino玩转掌控板(ESP32):ESP32概述与Arduino软件准备
  3. Processing Orders With Windows Workflow
  4. Golang适合高并发场景的原因分析
  5. zigbee与WiFi模块和蓝牙模块的区别是什么?
  6. 树状数组维护区间和的模型及其拓广的简单总结
  7. 测试是浪费时间,我的程序肯定没问题
  8. Android SQLite用sql语句进行增删改查
  9. UVALive 4725 Airport(二分)
  10. 标准软件开发过程 文档
  11. 程序员表白源码集合打包带走
  12. YUV_NV21图像数据到RGB颜色空间的转换
  13. MySQL查询数据库日志的查询
  14. Mac解决Error: No such file or directory @ rb_sysopen报错问题
  15. PID调节经验知识梳理
  16. yum clean all 是什么意思
  17. 关于图片以及格式UTI
  18. input file本地图片预览的方法(兼容IE、Chrome和Firefox)
  19. (23)语义分割--UNet
  20. dbcontext的使用

热门文章

  1. C++中引用传递与指针传递区别(进一步整理)
  2. java中三个基本框架_对于Java基础者应该如何理解Java中的三大框架!
  3. @Value和Hibernate问题
  4. java项目processes设置,Jvm调优和SpringBoot项目优化的详细教程
  5. layui分页limit不显示_【图片】新手 分页显示不了呀【layui吧】_百度贴吧
  6. 服务器系统巡检记录表,服务器月度巡检记录
  7. sqlmap (--os-shell)的使用
  8. mysql sqlserver schema_MySQL数据库数据迁移到SQLserver
  9. 宿迁学院的计算机系怎么样,宿迁学院是几本 学生评价怎么样好不好(10条)
  10. flow 静态类型检查 js