thinkphp3.2.3 命名空间
来源:互联网 发布:游戏模型制作软件 编辑:程序博客网 时间:2024/06/05 23:40
命名空间:
1、autoload自动加载类(命名空间)$class,写入static $_map(第一次)
2、判断是否符合命名空间格式
2.1 若为命名空间则通过字符串处理取出其根命名空间
2.1.1 若其根命名空间属于ThinkPhP/Library/ 下已有目录或自己创建的目录则命名空间自动定位为:$path = LIB_PATH;即物理路径
如E:\xamppp\htdocs\thinkphp3.2.3\ThinkPHP\Library/
2.1.2 若其根命名空间不属于ThinkPhP/Library/下,则取出其根命名空间路径$path
若属于配置文件中自定义的命名空间根目录下
则$path = "自定义的命名空间根目录的物理路径"./;
否则 $path =APP_PATH; //即以当前访问模块名为命名空间根目录 ./Application/
2.1.3 根据$path,$class,$取出所调用类的路径$filename
$filename = $path. str_replace('\\', '/', $class) . "规定的类文件后缀"
如:E:\xamppp\htdocs\thinkphp3.2.3\ThinkPHP\Library/Think/Storage.class.php
$path= E:\xamppp\htdocs\thinkphp3.2.3\ThinkPHP\Library/
str_replace('\\', '/', $class)= Think/Storage
"规定的类文件后缀" = .class.php
2.1.4 判断$filename是否为文件和大小写检测,include
2.2 如果不符合命名空间格式 而且 APP_USE_NAMESPACE=>false即配置为应用类库不使用命名空间
则自动加载类库层当前$class类似为IndexController,BaseModel这种形式,例: 'APP_AUTOLOAD_LAYER'=>'Controller,Model',
// 自动加载的应用类库层(配置文件中配置)
2.2.1若$class后缀与APP_AUTOLOAD_LAYER中的相同,如IndexController后缀与APP_AUTOLOAD_LAYER中的Controller相同,设$layer为APP_AUTOLOAD_LAYER中元素,例:$layer=Controller
则取当前模块路径MODULE_PATH //如:./Application/Home/ , 然后组合类路径
require_cache(MODULE_PATH .$layer .'/' .$class ."规定的类文件后缀")
require_cache //优化的require_once 不重复引用
例:
./Application/Home/Controller/IndexController.class.php
MODULE_PATH= ./Application/Home/
$layer= Controller
$class= IndexController
"规定的类文件后缀" = .class.php
2.2.2 若$class后缀与APP_AUTOLOAD_LAYER中的不相同,则根据自动加载路径设置进行尝试索 'APP_AUTOLOAD_PATH'=>''(配置文件中配置)
设$path为APP_AUTOLOAD_LAYER中的路径
import($path . ',' .$class)
public static function autoload($class) {
// 检查是否存在映射
if(isset(self::$_map[$class])) {
include self::$_map[$class];
}elseif(false !== strpos($class,'\\')){
$name = strstr($class, '\\', true);
if(in_array($name,array('Think','Org','Behavior','Com','Vendor')) || is_dir(LIB_PATH.$name)){
// Library目录下面的命名空间自动定位
$path = LIB_PATH;
}else{
// 检测自定义命名空间 否则就以模块为命名空间
$namespace = C('AUTOLOAD_NAMESPACE');
$path = isset($namespace[$name])? dirname($namespace[$name]).'/' : APP_PATH;
}
$filename = $path . str_replace('\\', '/', $class) . EXT;
if(is_file($filename)) {
// Win环境下面严格区分大小写
if (IS_WIN && false === strpos(str_replace('/', '\\', realpath($filename)), $class . EXT)){
return ;
}
include $filename;
}
}elseif (!C('APP_USE_NAMESPACE')) {
// 自动加载的类库层
foreach(explode(',',C('APP_AUTOLOAD_LAYER')) as $layer){
if(substr($class,-strlen($layer))==$layer){
if(require_cache(MODULE_PATH.$layer.'/'.$class.EXT)) {
return ;
}
}
}
// 根据自动加载路径设置进行尝试搜索
foreach (explode(',',C('APP_AUTOLOAD_PATH')) as $path){
if(import($path.'.'.$class))
// 如果加载类成功则返回
return ;
}
}
}
- thinkphp3.2.3 命名空间
- THINKPHP3.2命名空间
- THINKPHP3.2命名空间
- ThinkPHP3.2 命名空间随记
- 关于Thinkphp3.2 命名空间的说明-php5.3命名空间介绍-TP自动加载
- Thinkphp3.2.3 模型文件名和类名命名规则
- thinkphp3.2开发排错一例——没有使用命名空间导致没有自动加载类进而导致Class not found
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- matlab find函数详解
- WEB客户端:浏览器和页面
- python爬虫实战之爬取知乎帖子
- ubuntu14.04 源码安装Elasticsearch
- 安卓开发中不显示APP标题和图标的方法
- thinkphp3.2.3 命名空间
- Git 出现的 error: could not lock config file H:\/.gitconfig
- 快速排序的各种方法
- 201509-1_数列分段
- iOS 开放之asyncsocket 的 简明教程
- virtualbox--错误
- 最小生成树的Kruskal算法
- python-简单的makefile生成程序-没有注释
- matlab神经网络工具箱创建神经网络