2012-05-29 11 views
7

Próbuję utworzyć instancję obiektu dynamicznie utworzonej nazwy klasy. Używam przestrzeni nazw, a klasa, którą chcę utworzyć, jest w tej samej przestrzeni nazw.Wypisywanie klasy według ciągu znaków w bieżącym obszarze nazw

Aby examplify, to działa prawidłowo:

namespace MyNamespace; 

new MyClass; // MyNamespace\MyClass instantiated 

niniejsza nie:

namespace MyNamespace; 

$class = 'MyClass'; 
new $class; // Class 'MyClass' not found 

Czy to jest bug czy ja robię coś źle?

Odpowiedz

13

Podczas korzystania z ciągu znaków z numerem new należy podać pełną nazwę klasy.

Można to zrobić z __NAMESPACE__:

$fullclass = __NAMESPACE__ . '\\' . $class; 
new $fullclass; 

Zobacz dokumentację dla new operator i __NAMESPACE__ magicznym stała.

+0

Witaj, wygląda na prawidłową. Czy możesz podać link do źródła w celach informacyjnych? Dzięki :-) – jgivoni

+0

@jgivoni Dodano do mojej odpowiedzi. – lonesomeday

+0

Miło, dzięki za linki. Ale teraz zastanawiam się, kiedy mówisz "w pełni kwalifikowana nazwa klasy", czy nie powinno zaczynać się od "\"? Być może wiodący "\" może być implikowany w takich przypadkach? – jgivoni

Powiązane problemy