快速放入,我試圖建立一個使用WordPress的'生態系統',我有一個核心插件,然後額外的插件插件。WordPress PSR-4名稱空間插件訪問另一個命名空間插件
更深入的是,每個附加插件都需要核心插件才能運行。我已經使用WordPress標準編碼和文件結構實踐實現了這一點。我重做這個項目現在使用命名空間PSR-4,作曲家,閨房,然後通過作曲家
"autoload": {
"psr-4": {
"CorePlugin\\Library\\": "library"
}
}
等
標準的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示例核心插件類
<?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"
}
}
類是我很困惑。我想在不同的命名空間使用一個類從核心插件,我得到的錯誤:
Fatal error: Class 'CorePlugin\Library\Post_Register' not found in...
兩個插件自動加載各自的作曲家生成自動加載的文件,所以我雖然我能夠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,use
FOO \吧;和use
bar \ foo;像這樣。
<?php namespace App\Services;
use App\User;
use Validator;
use Illuminate\Contracts\Auth\Registrar as RegistrarContract;
class Registrar implements RegistrarContract {