2009-11-28 7 views
1

Pourquoi je reçois une erreur? la classe dans le même espace ..Namespace and classes in php

php 5.3.0

namespace ExampleSystem\Core; 
class Test { 
    public function __construct() { 
     print 'Test ok'; 
    } 
} 

// Fatal error: Class 'Test' not found in ... 
$class_name = 'Test'; 
$obj = new $class_name; 

// Ok 
$class_name = 'ExampleSystem\Core\Test'; 
$obj = new $class_name; 

// Ok 
$obj = new Test; 
+3

Donc * c'est à quoi ressemblent les espaces de noms légendaires ... –

Répondre

2

Je ne trouve pas le chapitre et le verset dans le manuel PHP, mais l'explication évidente est que lorsque vous faites:

$obj = new $string 

alors la valeur de $string n'est pas mappée dans l'espace de noms actuel. Cela a du sens, lorsque vous considérez que $string a pu être transmis depuis un autre endroit, où un espace de noms différent peut avoir été activé.

+0

Je m'attendais à ce qu'il soit dans le contexte de l'espace de noms, mais php semble rarement faire ce que je m'attends, et puisque je m'attends à ce que maintenant, peut habituellement le faire faire ce que je veux. :) – mtvee

+0

Merci! J'ai trouvé un exemple sur le site php.net ... La constante magique __NAMESPACE__ est la réponse :) http://il2.php.net/manual/fr/language.namespaces.nsconstants.php Exemple 3 – Alex