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

时间:2015-08-20 14:45:55

标签: php class namespaces

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

//directory e.g. vendor/company/sdk/files

vendors/ebat/feeback/environment.php

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

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

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

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

1 个答案:

答案 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); 
    }
}