您的位置:首页 > 编程语言 > PHP开发

vendor类库导入 分析源码 (thinkphp3.1)

2016-09-22 16:37 423 查看
根据以下thinkphp3.1的源码分析,所以vendor导入的时候要注意

vendor(class,baseUrl,ext);
class: 类库
baseUrl: 基础路径,指定''时为 /Vendoer
ext: 类库后缀,默认为.php

比如导入Vendor/phpanalysis/phpanalysis.class.php
则代码为:

vendor('phpanalysis.phpanalysis','','.class.php');

其中点号(.) 为目录分隔符

/// 以下为thinkphp3.1的源码

/**
* 快速导入第三方框架类库 所有第三方框架的类库文件统一放到 系统的Vendor目录下面
*
* @param string $class
*         类库
* @param string $baseUrl
*         基础目录
* @param string $ext
*         类库后缀
* @return boolean
*/
function vendor($class, $baseUrl = '', $ext = '.php') {
if (empty ( $baseUrl ))
$baseUrl = VENDOR_PATH;
return import ( $class, $baseUrl, $ext );
}

/**

* 导入所需的类库 同java的Import 本函数有缓存功能

* @param string $class 类库命名空间字符串

* @param string $baseUrl 起始路径

* @param string $ext 导入的文件扩展名

* @return boolean

*/

function import($class, $baseUrl = '', $ext='.class.php') {

static $_file = array();

$class = str_replace(array('.', '#'), array('/', '.'), $class);

if ('' === $baseUrl && false === strpos($class, '/')) {

// 检查别名导入

return alias_import($class);

}

if (isset($_file[$class . $baseUrl]))

return true;

else

$_file[$class . $baseUrl] = true;

$class_strut     = explode('/', $class);

if (empty($baseUrl)) {

$libPath    =   defined('BASE_LIB_PATH')?BASE_LIB_PATH:LIB_PATH;

if ('@' == $class_strut[0] || APP_NAME == $class_strut[0]) {

//加载当前项目应用类库

$baseUrl = dirname($libPath);

$class   = substr_replace($class, basename($libPath).'/', 0, strlen($class_strut[0]) + 1);

}elseif ('think' == strtolower($class_strut[0])){ // think 官方基类库

$baseUrl = CORE_PATH;

$class   = substr($class,6);

}elseif (in_array(strtolower($class_strut[0]), array('org', 'com'))) {

// org 第三方公共类库 com 企业公共类库

$baseUrl = LIBRARY_PATH;

}else { // 加载其他项目应用类库

$class   = substr_replace($class, '', 0, strlen($class_strut[0]) + 1);

$baseUrl = APP_PATH . '../' . $class_strut[0] . '/'.basename($libPath).'/';

}

}

if (substr($baseUrl, -1) != '/')

$baseUrl    .= '/';

$classfile       = $baseUrl . $class . $ext;

if (!class_exists(basename($class),false)) {

// 如果类不存在 则导入类库文件

return require_cache($classfile);

}

}

/////
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: