簡體   English   中英

無法從PHP中的命名空間類調用全局類。 使用Composer的自動加載

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM