php - 无法从其他命名空间加载供应商类

标签 php namespaces

我很难在 PHP 中环绕命名空间,尤其是当您的代码需要与驻留在另一个命名空间中的脚本进行交互时。我下载了一个 Shopify API 工具包并试图让它工作。在我开始向我的代码添加命名空间之前,一切都很好(这是必需的,或者与我网站上的其他 Wordpress 插件发生脚本冲突)。此外,顶部奇怪的命名空间 {} 位是因为在同一个文件中,我想要一个全局可访问的函数来使类成为单例。

期待更多地了解这是如何工作的。

#### FILE BEING CALLED

namespace {

    function SomeFunctionToBeAccessedGlobally() {
        return 'Hello';
    }
}

namespace MySpecialApp {

    class ShopifyImport {

        public function __construct() {
            // Do Whatever
            $this->doImport();
        }

        public function doImport() {

            require __DIR__ . '/vendor/autoload.php';

            $credential     = new Shopify\PrivateAppCredential('standard_api_key', 'secret_api_key', 'shared_api_key');
            $client         = new Shopify\Client($credential, 'shop_url', [ 'metaCacheDir' => './tmp' ]);

        }

    }

}


#### FILE '/vendor/autoload.php'

require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit73503f8de5d68cdd40a9c0dfd8a25b44::getLoader();

我确实注意到部分存储库克隆到 vendor 中的一些文件有 namespace Slince\Shopify;声明。我试着做一个 use在我的原始命名空间中使用该命名空间,但它也不起作用。

报告的 PHP 错误是:

Fatal error: Uncaught Error: Class 'MySpecialApp\Shopify\PrivateAppCredential' not found in /.../ShopifyImporter.php:139 Stack trace: #0 (Blah Blah Blah)

最佳答案

您的代码尝试创建一个新的 Shopify\PrivateAppCredential()当前命名空间中的对象。但是,此类在您的命名空间中不存在,因为它是“供应商”命名空间的一部分。

您可以通过添加 \ 为您的对象创建“重置”(读取回退)到全局命名空间。在他们面前,如documentation中所述:

$credential = new \Shopify\PrivateAppCredential('standard_api_key', 'secret_api_key', 'shared_api_key');

您可以在这里查看差异without \ with \ .

关于php - 无法从其他命名空间加载供应商类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57136737/

相关文章:

javascript - 使用 *.ini 配置文件通过 URL 更改 HTML 文本

来自数据库的php时间

module - systemverilog 模块命名空间

c++ - 使用命名空间时简单函数不起作用

.net - 在vb.net 3.5项目中引用2个使用相同命名空间的dll?

php - 试图找到一种简单的方法让 PHP 和 Mysql DB 为 PHP5.5 做数学运算(AVG MIN MAX)

php - 使用PHP的“Notice: Undefined variable”,“Notice: Undefined index”和“Notice: Undefined offset”

php - 代码点火器错误 : Fatal error: Cannot use object of type CI_DB_mysql_result as array

c++ - 从命名空间基类虚拟继承,具有来自命名空间的私有(private)成员

python - 通过 python 创建一个 vlan 并将其添加到网络命名空间