PHP 5.4.31 Released

La commande namespace et la constante __NAMESPACE__

(PHP 5 >= 5.3.0)

PHP supporte deux moyens pour accéder de manière abstraite aux éléments dans l'espace de nom courant, à savoir la constante magique __NAMESPACE__ et la commande namespace.

La valeur de __NAMESPACE__ est une chaîne qui contient le nom de l'espace de noms courant. Dans l'espace global, sans nom, elle contient une chaîne vide.

Exemple #1 Exemple avec __NAMESPACE__, dans un code avec espace de noms

<?php
namespace MonProjet;

echo 
'"'__NAMESPACE__'"'// affiche "MonProjet"
?>

Exemple #2 Exemple avec __NAMESPACE__, dans un code avec espace de noms global

<?php

echo '"'__NAMESPACE__'"'// affiche ""
?>
La constante __NAMESPACE__ est utile pour construire dynamiquement des noms, tels que :

Exemple #3 Utilisation de __NAMESPACE__ pour une construction dynamique de noms

<?php
namespace MonProjet;

function 
get($classname)
{
    
$a __NAMESPACE__ '\\' $classname;
    return new 
$a;
}
?>

La commande namespace peut aussi être utilisée pour demander explicitement un élément de l'espace de noms courant, ou d'un sous-espace. C'est l'équivalent pour les espaces de noms de l'opérateur self des classes.

Exemple #4 l'opérateur namespace, dans un espace de noms

<?php
namespace MonProjet;

use 
blah\blah as mine// Voyez "Utilisation des espaces de noms : importation et alias"

blah\mine(); // appelle la fonction MonProjet\blah\mine()
namespace\blah\mine(); // appelle la fonction MonProjet\blah\mine()

namespace\func(); // appelle la fonction MonProjet\func()
namespace\sub\func(); // appelle la fonction MonProjet\sub\func()
namespace\cname::method(); // appelle la méthode statique "method" de la classe MonProjet\cname
$a = new namespace\sub\cname(); // instantie un objet de la classe MonProjet\sub\cname
$b = namespace\CONSTANT// assigne la valeur de la constante MonProjet\CONSTANT à $b
?>

Exemple #5 l'opérateur namespace, dans l'espace de noms global

<?php

namespace\func(); // appelle la fonction func()
namespace\sub\func(); // appelle la fonction sub\func()
namespace\cname::method(); // appelle la méthode statique "method" de la classe cname
$a = new namespace\sub\cname(); // instantie un objet de la classe sub\cname
$b = namespace\CONSTANT// assigne la valeur de la constante CONSTANT à $b
?>

add a note add a note

User Contributed Notes 1 note

up
12
a dot schaffhirt at sedna-soft dot de
4 years ago
Just in case you wonder what the practical use of the namespace keyword is...

It can explicitly refer to classes from the current namespace regardless of possibly "use"d classes with the same name from other namespaces. However, this does not apply for functions.

Example:

<?php
namespace foo;
class
Xyz {}
function
abc () {}
?>

<?php
namespace bar;
class
Xyz {}
function
abc () {}
?>

<?php
namespace bar;
use
foo|Xyz;
use
foo|abc;
new
Xyz(); // instantiates \foo\Xyz
new namespace|Xyz(); // instantiates \bar\Xyz
abc(); // invokes \bar\abc regardless of the second use statement
|foo|abc(); // it has to be invoked using the fully qualified name
?>

(Sorry, I had to use "|" instead of "\", as it was always discarded in the preview, except within a comment.)

Hope, this can save someone from some trouble.

Best regards.
To Top