CI学习,边学边记 - Common.php
本帖最后由 imwebmaster.net 于 2012-5-12 16:21 编辑CI版本:2.1.0准备:将CodeIgniter包 重命名为ci ,并放在环境根目录下 , /ci 。
全局函数文件:/ci/system/core/Common.php
功能:提供全局可用的函数 is_php(), load_class() ...
函数:&load_class($class, $directory = 'libraries', $prefix = 'CI_')
function &load_class($class, $directory = 'libraries', $prefix = 'CI_')
{
static $_classes = array();
// .如果静态属性$_classes 已经设置了要加载的类直接返回
if (isset($_classes[$class]))
{
return $_classes[$class];
}
$name = FALSE;
//依次在APPPATH,BASEPATH 查找要加载类所在的文件,找到后包含文件
//依次哦
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;
}
}
// 如果请求了子类,也包含进来
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');
}
}
if ($name === FALSE)
{
//未找到类直接退出
exit('Unable to locate the specified class: '.$class.'.php');
}
// 记录我们刚加载的类名
is_loaded($class);
//实例化这个类,并返回这个类的实例
$_classes[$class] = new $name();
return $_classes[$class];
}
PHP基础
设置为静态作用域static的变量,称为静态变量,静态变量在函数退出后不会丢失值,并且能保留这个值以便再次调用此函数时使用。
在函数load_class 函数中,$_classes 是一个静态数组,在CodeIgniter.php中多次调用了这个函数,$_classes 包含了所有我们加载类的实例 。
看一下CodeIgniter.php 中的一段代码
$BM =& load_class('Benchmark', 'core');
$BM->mark('total_execution_time_start');
$BM->mark('loading_time:_base_classes_start')
$BM 是啥 , $BM 是$_classes['Benchmark'] 的引用,什么是引用呢? 引用可以认为是变量的别名。 $BM,$_classes['Benchmark']指向同一个对象实例,$BM 是$_classes['Benchmark'] 的别名。
同样的,is_load()函数,也是利用静态变量的特性,存储已经加载过类的标示符。没什么好说的。是不是觉得静态作用域很好用啊??
_exception_handler 这个函数相对比较复杂一点,主要还是位操作符比较难理解。去看一下
本帖最后由 viqecel 于 2012-7-19 22:09 编辑
不过下面这句不懂 static $_classes = array();
// .如果静态属性$_classes 已经设置了要加载的类直接返回
if (isset($_classes[$class))
{
return $_classes[$class;
}
既然刚刚声明一个变量$_classes.并规定他为arrary(),则他一定是新的东西.怎么下面还要判断他是否设置? 他刚出生,怎么可能已经设置了加载的类啊.这个判断太多余了吧
我把程序上传到Linux服务器后,提示 Unable to locate the specified class:URI.php
不知道这个是什么情况呢?是什么导致的? 我是個初學者
要好好學習
页:
[1]