【发布时间】:2015-12-01 06:08:09
【问题描述】:
快速地说,我正在尝试使用 WordPress 构建一个“生态系统”,其中我有一个核心插件,然后是其他附加插件。
更深入地说,每个附加插件都需要核心插件才能运行。我使用 WordPress 标准编码和文件结构实践实现了这一点。我正在修改这个项目,现在使用 Namespacing PSR-4、composer、bower 等。
标准 WordPress 安装
|
|__www
|
|___wp-admin
|
|___wp-content
| |
| |___plugins
| | |
| | |___my-core-plugin
| | | |
| | | |___library
| | | | |
| | | | |___class-post-register.php
| | | |
| | | |___vendor
| | | | |
| | | | |___autoload.php
| | | |
| | | |___composer.json
| | | |
| | | |___core.php
| | |
| | |___my-first-addon-plugin
| | | |
| | | |___library
| | | |
| | | |___vendor
| | | | |
| | | | |___autoload.php
| | | |
| | | |___composer.json
| | | |
| | | |___core.php
| | |
| | |___my-second-addon-plugin
| | | |
| | | |___library
| | | |
| | | |___vendor
| | | | |
| | | | |___autoload.php
| | | |
| | | |___composer.json
| | | |
| | | |___core.php
| | |
| |___themes
| | |
| | |___my-custom-theme
| |
| wp-includes
核心插件 psr4 通过 composer
"autoload": {
"psr-4": {
"CorePlugin\\Library\\": "library"
}
}
核心插件类示例
<?php
namespace CorePlugin\library;
class Post_Register {
private __construct() {
// ... code
}
private init() {
}
private register( $data ) {
// .. code to register a custom post for example.
}
}
第一个附加插件 psr4 通过作曲家
"autoload": {
"psr-4": {
"FirstAddon\\Library\\": "library"
}
}
来自附加插件的类
下面是我感到困惑的地方。我正在尝试在不同的命名空间中使用来自核心插件的类,但出现错误:
致命错误:在...中找不到类“CorePlugin\Library\Post_Register”
两个插件都自动加载它们各自的作曲家生成自动加载文件,所以我虽然可以use 命名空间。在深入研究 PHP 手册 (http://php.net/manual/en/language.namespaces.php) 的这一部分之前,我来这里询问,我可能会尝试子命名空间。
<?php
namespace FirstAddon;
use CorePlugin\Library\Post_Register;
class First_Addon {
private __construct() {
// ... code
}
private init() {
}
private another_function() {
}
}
另外,我很犹豫是否使用带括号的子命名空间,例如,在 laravel 中,usefoo\bar;和use bar\foo;像这样。
<?php namespace App\Services;
use App\User;
use Validator;
use Illuminate\Contracts\Auth\Registrar as RegistrarContract;
class Registrar implements RegistrarContract {
【问题讨论】:
标签: php wordpress plugins namespaces