问题:对外的 PHP 类库,如何拥有自己的命名空间, 同时又不破坏所在项目的命令空间风格?
解决方案:
1、首先得学习一下 php函数 spl_autoload_register(),详情查看:PHP中spl_autoload_register()函数的用法;
2、在 PHP类库文件夹的根目录下,增加一个 autoload.php 文件,内容参考如下:
<?php
function classLoader($class){
$path = str_replace('\\', DIRECTORY_SEPARATOR, $class);
$file = __DIR__ . DIRECTORY_SEPARATOR . $path . '.php';
if (file_exists($file)) {
require_once $file;
}
}
spl_autoload_register('classLoader');
3、确保类库的命名空间,层次关系跟所在目录保持一致,如:
- oss\autoload.php
- oss\OSS\OssClient.php:命令空间为 namespace OSS;
- oss\OSS\Core\MimeTypes.php:命令空间为 namespace OSS\Core;
- oss\OSS\Http\RequestCore.php:命令空间为 namespace OSS\Http;
- ......
4、在需要 引用这个类库的地方,包含这个 autoload.php 文件即可!参考如下:
控制器文件:application/controller/admin/BlogController.php
<?php
require_once APP_PATH . '/third_party/oss/autoload.php';
namespace application\controller\admin;
use OSS\OssClient;
use OSS\Core\OssException;
......
/**
* 博客管理模块
*/
class BlogController extends AdminBaseController {
/**
* 初始化
*/
protected function _init() {
parent::_init();
}
/**
* 添加文章
*/
public function addBlog() {
// ......
}
}