2015-08-20 35 views
1

我有很多具有相同類名的SDK,因此我已將它們移動到文件夾中並創建了命名空間。這些sdks通常用於訪問API。如何在php中取消設置命名空間以訪問全局類

//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

添加領先的\是訪問頂級命名空間/類的正確方法。

但好像你在一個類似的錯誤運行其他地方 - 請注意,您的第二個致命錯誤是關於反思對象,不反思。你有其他代碼試圖訪問ReflectionObject

另外請注意,您也可以導入這些命名空間少類,如果你不想前面加上\

namespace Marketplace\Ebay; 

use \ReflectionClass; 

class Feedback extends \Ebat\Feedback\EbatNsFeedback_Environment { 

    //simple example 
    public function new_ReflectionClass($obj){ 
     return new ReflectionClass($obj); 
    } 
} 
每參考