php ci 框架 扩展缓存类,CodeIgniter扩展核心类实例详解
本文实例讲述了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扩展核心类实例详解相关推荐
- python描述符(descriptor)、属性(property)、函数(类)装饰器(decorator )原理实例详解
2019独角兽企业重金招聘Python工程师标准>>> 1.前言 Python的描述符是接触到Python核心编程中一个比较难以理解的内容,自己在学习的过程中也遇到过很多的疑惑,通过 ...
- python apscheduler 阻塞方式只用一个线程_框架APScheduler在python中调度使用的实例详解...
本篇文章主要介绍了详解python调度框架APScheduler使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 最近在研究python调度框架APScheduler使 ...
- ueditor集成实例php,Laravel框架集成UEditor编辑器的方法图文与实例详解
本文实例讲述了Laravel框架集成UEditor编辑器的方法.分享给大家供大家参考,具体如下: 一. 背景 在项目开发的过程中,免不了使用修改功能,而富文本编辑器是极为方便的一种推荐,当然,个人认为 ...
- struts2框架单文件、多文件上传实例详解
版权声明:本文为博主原创文章,如需转载,请标明出处. https://blog.csdn.net/alan_liuyue/article/details/79390681 简介 1.上一篇博客讲解了J ...
- 【小白学PyTorch】扩展之Tensorflow2.0 | 21 Keras的API详解(下)池化、Normalization
<<小白学PyTorch>> 扩展之Tensorflow2.0 | 21 Keras的API详解(上)卷积.激活.初始化.正则 扩展之Tensorflow2.0 | 20 TF ...
- python 录制web视频_Python django框架 web端视频加密的实例详解
视频加密流程图: 后端获取保利威的视频播放授权token,提供接口api给前端 参考文档:http://dev.polyv.net/2019/videoproduct/v-api/v-api-play ...
- moviepy音视频剪辑:视频剪辑基类VideoClip的属性及方法详解
☞ ░ 前往老猿Python博文目录 ░ 一.概述 在<moviepy音视频剪辑:moviepy中的剪辑基类Clip详解>和<moviepy音视频剪辑:moviepy中的剪辑基类Cl ...
- USB CCID类协议中的APDU命令详解
出处:http://blog.chinaunix.net/uid-29124653-id-4573075.html 原文地址:USB CCID类协议中的APDU命令详解 作者:jeffasdasd 最 ...
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
标签:读写分离 页面缓存 URL重写 Nginx 反向代理 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://freeloda.bl ...
最新文章
- futuretask使用_JDK源码分析-FutureTask
- arduino nano 蓝牙_用Arduino玩转掌控板(ESP32):ESP32概述与Arduino软件准备
- Processing Orders With Windows Workflow
- Golang适合高并发场景的原因分析
- zigbee与WiFi模块和蓝牙模块的区别是什么?
- 树状数组维护区间和的模型及其拓广的简单总结
- 测试是浪费时间,我的程序肯定没问题
- Android SQLite用sql语句进行增删改查
- UVALive 4725 Airport(二分)
- 标准软件开发过程 文档
- 程序员表白源码集合打包带走
- YUV_NV21图像数据到RGB颜色空间的转换
- MySQL查询数据库日志的查询
- Mac解决Error: No such file or directory @ rb_sysopen报错问题
- PID调节经验知识梳理
- yum clean all 是什么意思
- 关于图片以及格式UTI
- input file本地图片预览的方法(兼容IE、Chrome和Firefox)
- (23)语义分割--UNet
- dbcontext的使用
热门文章
- C++中引用传递与指针传递区别(进一步整理)
- java中三个基本框架_对于Java基础者应该如何理解Java中的三大框架!
- @Value和Hibernate问题
- java项目processes设置,Jvm调优和SpringBoot项目优化的详细教程
- layui分页limit不显示_【图片】新手 分页显示不了呀【layui吧】_百度贴吧
- 服务器系统巡检记录表,服务器月度巡检记录
- sqlmap (--os-shell)的使用
- mysql sqlserver schema_MySQL数据库数据迁移到SQLserver
- 宿迁学院的计算机系怎么样,宿迁学院是几本 学生评价怎么样好不好(10条)
- flow 静态类型检查 js