2013-05-20 2 views
0

Ive только начал изучать пространства имен. Если я это сделаю:Создание экземпляра класса из строки обычно не работает в php

$a = new Devices\Desktop(); 

это работает. Но у меня есть динамические имена классов, поэтому я должен делать это из переменной.

$a = 'Devices\Desktop'; 
$a = new $a(); 

Это не работает, хотя его то же самое. Класс не найден. Зачем?

+0

возможно дубликат http://stackoverflow.com/questions/5072352/экземпляры-экземпляры класса-by-string-using-php-5-3-namespaces – underscore

+0

В каком пространстве имен находится этот код? – deceze

+0

нет, невозможно дублировать, я прочитал это и не решил проблему. – user1929946

ответ

3

Выходя на конечности:

namespace Foo; 

class Bar { } 

new Bar; 

$bar = 'Bar'; 
new $bar; 

Это не будет работать. Имена классов строк всегда абсолютны, они не разрешены относительно текущего пространства имен (потому что вы можете передавать строки из одного пространства имен в другое, что должно быть разрешено тогда?). Для того, чтобы эти два конкретизации эквивалент, вы должны использовать полное имя класса:

$bar = 'Foo\Bar'; 

__NAMESPACE__ константа может быть полезным здесь:

$bar = __NAMESPACE__ . '\Bar'; 
+0

Я вижу. Это в официальном документе? – user1929946

+0

Возможно, где-то, да. : -3 – deceze

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