猿问

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

我很难在 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 错误是:


致命错误:未捕获的错误:在 /.../ShopifyImporter.php:139 中找不到类“MySpecialApp\Shopify\PrivateAppCredential”堆栈跟踪:#0(Blah Blah Blah)


莫回无
浏览 113回答 1
1回答

暮色呼如

您的代码尝试Shopify\PrivateAppCredential()在当前命名空间中创建一个新对象。但是,此类在您的命名空间中不存在,因为它是“供应商”命名空间的一部分。您可以通过\在它们前面添加一个来“重置”(读取回退)到对象创建的全局命名空间,如文档中所述:$credential = new \Shopify\PrivateAppCredential('standard_api_key', 'secret_api_key', 'shared_api_key');您可以在此处查看不带\和带\的差异。
随时随地看视频慕课网APP
我要回答