我有很多具有相同类名的SDK,因此我将它们移动到文件夹中并创建了名称空间。这些sdks通常用于访问API。
//directory e.g. vendor/company/sdk/files
vendors/ebat/feeback/environment.php
然后我有完全独立的库,我自己创建了包含我需要与这些sdks交互的任何方法。也命名空间。
//directory e.g.
library/marketplace/ebay/feedback.php
不确定正确的术语是什么,但在这些库中是一些 全局 对象,例如stdClass
和ReflectionClass
似乎无法访问/找到。
feedback.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
如何访问本机/全局ReflectionClass
类,所有类似的问题似乎都可以通过添加反斜杠来解决。
答案 0 :(得分:1)
添加前导\
是访问顶级命名空间/类的正确方法。
但似乎您在其他地方遇到了类似的错误 - 请注意,您的第二个致命错误是关于Reflection Object ,而不是Reflection 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);
}
}