2016-10-03 4 views
0

Привет У меня есть имя класса «Клиент» в переменной, как:Попытка загрузить класс «Класс» из глобального пространства имен. Ошибка 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

Youre объяснение немного хаотично. Пожалуйста, напишите минимальный, но полный фрагмент кода, который позволит нам воспроизвести проблему. '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

Вам нужно полное имя класса в вашей переменной (с полным пространством имен). –

Смежные вопросы