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

标签 php class namespaces

我有很多具有相同类名的 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似乎无法访问/找到。

反馈.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/

相关文章:

php - 如何在 Yii Migrations 中保存 sql 语句的返回值

php - Opencart添加和复制错误

php - PHP 中的 cURL : curl_exec() or exec ('curl' )?

vb.net - 在另一个类中声明一个类的目的是什么?

c++ - 类名关联

c++ - dynamic_cast 理解

c# - 在目录中组织命名空间和类

php - 使用 Symfony 1.4 的自动加载器加载命名空间类?

javascript - 在提交表单之前将 GET 信息添加到 POST 请求

namespaces - Kentico 导入自定义命名空间,无法识别程序集