我有很多具有相同类名的 SDK,所以我将它们移动到文件夹中并创建了命名空间。这些 sdk 通常用于访问 API。
//directory e.g. vendor/company/sdk/files
vendors/ebat/feeback/environment.php
然后,我拥有自己创建的完全独立的库,其中包含与这些 sdk 交互所需的任何方法。也命名空间。
//directory e.g.
library/marketplace/ebay/feedback.php
不确定正确的术语是什么,但在这些库中有一些 全局对象,例如
stdClass
和 ReflectionClass
似乎无法访问/找到。反馈.php
namespace Marketplace\Ebay;
class Feedback extends \Ebat\Feedback\EbatNsFeedback_Environment {
//simple example
public function new_ReflectionClass($obj){
return new ReflectionClass($obj);
}
}
现在如果我尝试调用这个方法
$this->marketplace->ebay->feedback->new_ReflectionClass(new stdClass()));
显示此错误。
Fatal error: Class 'Marketplace\Ebay\ReflectionClass' not found
当我添加反斜杠时
return new \ReflectionClass($obj);
然后它给了我这个错误
Fatal error: Class 'Ebat\Feedback\ReflectionObject' not fount
如何访问 native /全局
ReflectionClass
类,所有类似的问题似乎都通过添加反斜杠来解决。
最佳答案
添加前导 \
是访问顶级命名空间/类的正确方法。
但是您似乎在其他地方遇到了类似的错误 - 请注意,您的第二个 fatal error 是关于反射 对象 , 不是反射 类(class) .您是否有其他代码试图访问 ReflectionObject
?
另外,请注意,如果您不想为每个引用添加前缀 \
,您也可以导入这些无命名空间的类。
namespace Marketplace\Ebay;
use \ReflectionClass;
class Feedback extends \Ebat\Feedback\EbatNsFeedback_Environment {
//simple example
public function new_ReflectionClass($obj){
return new ReflectionClass($obj);
}
}
关于php - 如何在 php 中取消设置命名空间以访问全局类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32121393/