2016-10-03 60 views
0

您好我有一個變量就像一個類名「客戶」:試圖從全局名稱空間加載類「Class」。錯誤的Symfony2

$myclass = "Customer"; 

現在,我已經創建的對象該類在運行時的服務文件中:

namespace MyBundle\Service; 

use Doctrine\ORM\EntityManager; 
use Doctrine\ORM\QueryBuilder; 
use MyBundle\Component\Data\handle\Customer; 
use Symfony\Component\HttpFoundation\Request; 

class MyServices 
{ 

    private $em; 

    public function __construct(EntityManager $entityManager) 
    { 
     $this->em = $entityManager;   
} 

public function getClassCustomer($className) 
{ 

    $object = new $className(); 
    } 
} 

現在我我收到以下錯誤:

Attempted to load class "Customer" from the global namespace 

即使Customer類已經定義幷包含在同一個文件:

請建議可能是什麼問題。 在此先感謝

+0

特殊照顧的解釋是有點亂。請發佈最小但完整的代碼片段,讓我們重現此問題。 'use/BundleName/ClassFolder:'不包括任何東西。 –

+0

Hi dragoste:actualy namespace Mybundle \ Service; 使用Mybundle \ Component \ DataFolder \ Classess \ Customer;我在文件頂部使用: –

回答

1

問題是,當您使用變量作爲類名稱,則use語句不適用。

當你

use MyBundle\Component\Data\handle\Customer; 
new Customer(); 

它解析爲

new MyBundle\Component\Data\handle\Customer(); 

但與此:

use MyBundle\Component\Data\handle\Customer; 
$className = "Customer";   
$object = new $className(); 

它仍然只是:

$object = new \Customer(); 

看看Example #3 on this page,因爲它是類似的情況:

use My\Full\Classname as Another, My\Full\NSname; 

$obj = new Another; // instantiates object of class My\Full\Classname 
$a = 'Another'; 
$obj = new $a;  // instantiates object of class Another 
+0

我的課程名稱是動態的:它將是任何類,如客戶和某個時間用戶等。那麼在這種情況下? –

+1

您的變量需要全限定類名(具有完整的名稱空間)。 –

相關問題