如何在php中取消命名空间以访问全局类


How to unset namespace in php to access global class

我有很多sdk具有相同的类名,所以我将它们移动到文件夹中并创建了名称空间。这些sdk通常用于访问api。

//directory e.g. vendor/company/sdk/files
vendors/ebat/feeback/environment.php

然后我有完全独立的库,我自己创建了包含我需要与这些sdk交互的任何方法。名称空间。

//directory e.g.
library/marketplace/ebay/feedback.php

不确定正确的术语是什么,但在这些库中有一些全局对象,例如stdClassReflectionClass,它们似乎无法访问/find。

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类,所有类似的问题似乎都通过添加反斜杠来修复。

添加前导'是访问顶级命名空间/类的正确方法。

但似乎你在其他地方遇到了类似的错误-请注意,你的第二个致命错误是关于反射对象,而不是反射。您是否有其他代码试图访问ReflectionObject ?

另外,如果您不想在每个引用前加上'

,还可以导入这些没有名称空间的类。
namespace Marketplace'Ebay;
use 'ReflectionClass;
class Feedback extends 'Ebat'Feedback'EbatNsFeedback_Environment {
    //simple example 
    public function new_ReflectionClass($obj){
        return new ReflectionClass($obj); 
    }
}