不灭的焱

革命尚未成功,同志仍须努力

作者:php-note.com  发布于:2020-02-09 22:25  分类:PHP基础  编辑

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