博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CI框架代码体会
阅读量:5826 次
发布时间:2019-06-18

本文共 1839 字,大约阅读时间需要 6 分钟。

hot3.png

本文主要记录一些自己在浏览CI代码时候的一些体会, 并不分析CI的使用。

(  CI手册地址)

一 、 首先的一点就是, 已加载类在codeigniter, controller, model中的通用, 这使得CI的controller和model功能丰富。

体现在Controller中的构造函数中:

foreach (is_loaded() as $var => $class)

        {
            $this->$var =& load_class($class);   //将加载过的载入
        }
        $this->load =& load_class('Loader', 'core');
        $this->load->initialize();   // 加载autoload配置的库类

体现在model中:

function __get($key)

    {
        $CI =& get_instance();
        return $CI->$key;
    }

方法中

通过这样的操作, 是的CI的controller, model 功能丰富。

2、 CI允许扩展核心系统类:

在/system/core/common 中:

load_class 中有如下几行:

foreach (array(APPPATH, BASEPATH) as $path)		{			if (file_exists($path.$directory.'/'.$class.'.php'))			{				$name = $prefix.$class;				if (class_exists($name) === FALSE)				{					require($path.$directory.'/'.$class.'.php');				}				break;			}		}		// Is the request a class extension?  If so we load it too		if (file_exists(APPPATH.$directory.'/'.config_item('subclass_prefix').$class.'.php'))		{			$name = config_item('subclass_prefix').$class;			if (class_exists($name) === FALSE)			{				require(APPPATH.$directory.'/'.config_item('subclass_prefix').$class.'.php');			}		}

对于Controller的重写体现在(system/core/codeingiter):

require BASEPATH.'core/Controller.php';

    function &get_instance()
    {
        return CI_Controller::get_instance();
    }
    if (file_exists(APPPATH.'core/'.$CFG->config['subclass_prefix'].'Controller.php'))
    {
        require APPPATH.'core/'.$CFG->config['subclass_prefix'].'Controller.php';
    }

这可以满足自己的业务逻辑的修改, 例如可以在自己扩展出来的controller中加一些权限控制的操作等等。

 

3、 Loader类也被controller加载了(依附在controller上的model也享受利益), 通过这个类,可以实现各种功能库的加载

 

4、 可以挂载多个系统

根据业务需求可能需要开发多个系统, 可以在index.php , 根据业务类型, 修改index.php

$applocation_folder参数

例如: 可以在配置虚拟主机的时候, 设置service_name 等等 当然这只是一种思路

(待续)

对CI的common文件比较纠结的就是, 在整个框架代码中, 突然出来一个这个理的方法还是有点让人不知所措, 觉得应该在方法的前面加上一个common_之类的标记, 然后自己也可以在里面创建一个自己的同类文件, 在方法的前面标记上my_,, 可能会更加清晰一些

转载于:https://my.oschina.net/u/195896/blog/80381

你可能感兴趣的文章
FreeMarker-Built-ins for strings
查看>>
argparse - 命令行选项与参数解析(转)
查看>>
修改上一篇文章的node.js代码,支持默认页及支持中文
查看>>
spring-boot支持websocket
查看>>
我理想中的前端工作流
查看>>
Chrome 广告屏蔽功能不影响浏览器性能
查看>>
Android状态栏实现沉浸式模式
查看>>
使用Openfiler搭建ISCSI网络存储
查看>>
学生名单
查看>>
(转) 多模态机器翻译
查看>>
矩阵常用归一化
查看>>
Oracle常用函数总结
查看>>
【聚能聊有奖话题】Boring隧道掘进机完成首段挖掘,离未来交通还有多远?
查看>>
考研太苦逼没坚持下来!看苑老师视频有点上头
查看>>
HCNA——RIP的路由汇总
查看>>
zabbix监控php状态(四)
查看>>
实战Django:小型CMS Part2
查看>>
原创]windows server 2012 AD架构试验系列 – 16更改DC计算机名
查看>>
统治世界的十大算法
查看>>
linux svn安装和配置
查看>>