我很难在 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/