PHP Référencement d'une classe ou d'une fonction dans un espace de noms


Exemple

Comme indiqué dans Déclarer les espaces de noms , nous pouvons définir une classe dans un espace de noms comme suit:

namespace MyProject\Shapes;

class Rectangle { ... }

Pour référencer cette classe, le chemin complet (y compris l'espace de noms) doit être utilisé:

$rectangle = new MyProject\Shapes\Rectangle();

Cela peut être raccourci en important la classe via l' use -Déclaration:

// Rectangle becomes an alias to MyProject\Shapes\Rectangle
use MyProject\Shapes\Rectangle;

$rectangle = new Rectangle();

En ce qui concerne PHP 7.0, vous pouvez regrouper diverses déclarations d’ use en une seule instruction entre parenthèses:

use MyProject\Shapes\{
    Rectangle,         //Same as `use MyProject\Shapes\Rectangle`
    Circle,            //Same as `use MyProject\Shapes\Circle`
    Triangle,          //Same as `use MyProject\Shapes\Triangle`
    
    Polygon\FiveSides, //You can also import sub-namespaces
    Polygon\SixSides   //In a grouped `use`-statement
};

$rectangle = new Rectangle();

Parfois, deux classes ont le même nom. Ce n'est pas un problème si elles sont dans un autre espace de noms, mais il pourrait devenir un problème lors d'une tentative de les importer à l' use -Déclaration:

use MyProject\Shapes\Oval;
use MyProject\Languages\Oval; // Apparantly Oval is also a language!
// Error!

Ceci peut être résolu en définissant un nom pour l'alias vous en utilisant le as mot clé:

use MyProject\Shapes\Oval as OvalShape;
use MyProject\Languages\Oval as OvalLanguage;

Pour référencer une classe en dehors de l'espace de noms actuel, il doit être échappé avec un \ , sinon un chemin d'accès relatif à l'espace de noms est pris dans l'espace de noms actuel:

namespace MyProject\Shapes;

// References MyProject\Shapes\Rectangle. Correct!
$a = new Rectangle();

// References MyProject\Shapes\Rectangle. Correct, but unneeded!
$a = new \MyProject\Shapes\Rectangle(); 

// References MyProject\Shapes\MyProject\Shapes\Rectangle. Incorrect!
$a = new MyProject\Shapes\Rectangle(); 


// Referencing StdClass from within a namespace requires a \ prefix
// since it is not defined in a namespace, meaning it is global.

// References StdClass. Correct!
$a = new \StdClass(); 

// References MyProject\Shapes\StdClass. Incorrect!
$a = new StdClass();