【发布时间】:2019-07-25 14:05:35
【问题描述】:
我正在编写一个插件并尝试使用 composer 来自动加载我的类,但我无法让它工作。我知道关于这个主题有很多问题,但似乎对我没有任何帮助。
目录结构:
-
插件名称
- 类
- Class_Name.php
- 供应商
- 插件名称.php
- composer.json
- composer.lock
- 类
composer.json 文件:
{
"require": {
"katzgrau/klogger": "dev-master"
},
"autoload": {
"psr-4": { "Foo\\": "classes" }
}
}
plugin-name.php 文件:
namespace Plugins_Main;
use Foo\Class_Name;
require 'vendor/autoload.php';
class Plugin_Name_Bootstrap{
public static function run() {
Class_Name::instance();
}
}
add_action('plugins_loaded', array('Plugins_Main\Plugin_Name_Bootstrap', 'run'));
Class_Name.php 文件:
namespace Foo;
class Class_Name{
protected static $_instance = null;
public static function instance(){
if ( self::$_instance === null ) {
self::$_instance = new self();
}
return self::$_instance;
}
}
根据文档,这种自动加载应该可以工作,但我仍然得到 p>
找不到类“Foo\Class_Name”
我认为这可能与我试图在 plugins_loaded 钩子中初始化“Class_Name”这一事实有关,但如果我更早地需要 vendor/autoload.php 为什么这很重要?
【问题讨论】:
-
我认为问题在于您在
require 'vendor/autoload.php';之前执行use Foo\Class_Name;。尝试在use之前执行require:) -
还是不行:/
-
嗯,那可能是无法读取自动加载,试试把
require 'vendor/autoload.php';换成require __DIR__ . '/vendor/autoload.php'; -
解决了这个问题..谢谢!
标签: php wordpress composer-php