[英]Can't call global class from namespaced class in PHP. Using Composer's autoload
我正在使用作曲家创建自动加载文件,所有爵士乐都按预期工作。
问题是 : 当我尝试调用全局定义的类时,它将一直在名称空间内部而不是全局范围内查找。 即使我像在“ new \\ WC_Order();”中那样使用\\转义符
我已经将composer.json配置为将MyNamespace自动加载到正确的目录中,并在我的wordpress主题的function.php中包含“ vendor / autoload.php”,并创建一个有效的新实例。 关于此过程的所有工作均有效。
include 'vendor\autoload.php';
$myclass = new MyNamespace\MyClass()
这是文件'MyNamespace \\ MyClass.php中发生错误的位置:
namespace MyNamespace;
class MyClass {
public function __construct()
{
$order = new \WC_Order(1234);
}
}
PHP引发致命错误:
Fatal error: Uncaught Error: Class 'MyNamespace\WC_Order' not found in ...\MyNamespace\MyClass.php
任何提示或提示将不胜感激!
编辑:我的作曲家/目录设置
composer.json
{
"autoload": {
"psr-4": {
"MyNamespace\\": "MyNamespace"
}
},
"require": {
"guzzlehttp/guzzle": "^6.3"
}
}
functions.php在根目录中,而类在MyNamespace / MyClass.php中
尝试:
include 'vendor\autoload.php';
$myclass = new \MyNamespace\MyClass();
要么:
include 'vendor\autoload.php';
use MyNamespace\MyClass;
$myclass = new MyClass();
您可以在此处找到指南: https : //www.php.net/manual/zh/language.namespaces.importing.php
我想到了。 既然这是Wordpress,我应该迷上一个动作。 Woocommerce尚未加载。 一旦我使用add_action('init','doMyStuff'); 有效。
我仍然感到奇怪的是,消息是它虽然无法在命名空间中找到该类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.