Les noms sont résolus suivant ces règles de résolution :
C::D::e()
est traduis en A::B::C::D::e()
.
new C()
est traduit en new A::B::C()
.
new C()
est résolu :
new ::C()
doit être utilisé.
new A::B::C()
se réfère à la classe
C depuis l'espace de noms A::B.
Exemple #1 Illustration de la résolution de nom
<?php
namespace A;
// Appels de fonctions
foo(); // Tout d'abord, on tente d'appeler "foo", définie dans l'espace de noms "A"
// puis, on appèle la fonction interne "foo"
::foo(); // Appel de la fonction "foo", définie dans l'espace global
// Références des classes
new B(); // Tout d'abord, on tente de créer un objet de la classe "B", défini dans l'espace
// de noms "A", puis, on crée l'objet dans la classe interne "B"
new ::B(); // On crée un objet de la classe "B", défini dans l'espace global
// fonctions statiques de méthodes et d'espace de noms depuis un autre espace de noms
B::foo(); // Tout d'abors, on tente d'appeler la fonction "foo" depuis l'espace de noms "A::B",
// puis, on appèle la méthode "foo" de la classe interne "B"
::B::foo(); // Tout d'abord, on tente d'appeler la fonction "foo" depuis l'espace de noms "B",
// puis, on appèle la méthode "foo" de la classe "B" depuis l'espace global
// fonctions statiques de méthodes et d'espace de noms depuis l'espace de noms courant
A::foo(); // Tout d'abord, on tente d'appeler la fonction "foo" depuis l'espace de noms "A::A",
// puis, on tente d'appeler la méthode "foo" de la classe "A" depuis l'espace de noms "A",
// puis, on tente d'appeler la fonction "foo" depuis l'espace de noms "A",
// puis, on appèle la méthode "foo" de la classe interne "A"
::A::foo(); // Tout d'abord, on tente d'appeler la fonction "foo" depuis l'espace de noms "A",
// puis, on appèle la méthode "foo" de la classe "A" depuis l'espace global
?>