CI自动加载使用命名空间

CI自动加载使用命名空间

有很多人问CodeIgniter可以使用命名空间(namespace)么?
CodeIgniter文档里没有namespace的部分,所以要自己扩展core文件。
方法其实很简单,也不会有代码冲突。

我看了源代码有三个接口,我就在这里再加一个命名空间名的传递接口。
要注意的是\符号要特殊处理,这个常识不提醒大家也应该都知道~。

//原生使用方法
$this->load->library('order/shoporder'); 
//扩展后使用方法
$this->load->library('order/shoporder',null,null,'CI\\Nickspace\\'); 

下面就来介绍一下要使用命名空间怎么解决方法。

文件路径: /system/core/Loder.php


// 190行
public function library($library, $params = NULL, $object_name = NULL, $name_space = NULL){
//...
}

// 218行
$this->_ci_load_library($library, $params, $object_name, $name_space);

// 1020行
protected function _ci_load_library($class, $params = NULL, $object_name = NULL, $name_space = NULL){
}

// 1072行
return $this->_ci_init_library($class, '', $params, $object_name, $name_space);

// 1086行
return $this->_ci_init_library($class, '', $params, $object_name, $name_space);

// 1114行
protected function _ci_load_stock_library($library_name, $file_path, $params, $object_name,$name_space = NULL){
}

// 1133行
return $this->_ci_init_library($library_name, $prefix, $params, $object_name, $name_space);

// 1154行
return $this->_ci_init_library($library_name, $prefix, $params, $object_name, $name_space);

// 1184行
return $this->_ci_init_library($library_name, $prefix, $params, $object_name, $name_space);

// 1204行
protected function _ci_init_library($class, $prefix, $config = FALSE, $object_name = NULL, $name_space = NULL)
    {

// 1252行
$class_name = $prefix.$class;
(is_null($name_space)) or $class_name = $name_space.$class_name;    //添加这行

if ( ! class_exists($class_name, FALSE))

CodeIgniter 版本是3.1的,其他版本应该大同小异。
以上就是 CI自动加载使用命名空间的方法了。
that‘s all~