问题:对外的 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() { // ...... } }