J'ai un peu de mal avec les espaces de noms et les use
déclarations.
J'ai trois fichiers: ShapeInterface.php
, Shape.php
et Circle.php
.
J'essaie de le faire en utilisant des chemins relatifs, donc j'ai mis ceci dans toutes les classes:
namespace Shape;
Dans ma classe de cercle, j'ai ce qui suit:
namespace Shape;
//use Shape;
//use ShapeInterface;
include 'Shape.php';
include 'ShapeInterface.php';
class Circle extends Shape implements ShapeInterface{ ....
Si j'utilise les include
déclarations, je n'obtiens aucune erreur. Si j'essaye les use
déclarations que j'obtiens:
Erreur fatale: classe 'Shape \ Shape' introuvable dans /Users/shawn/Documents/work/sites/workspace/shape/Circle.php sur la ligne 8
Quelqu'un pourrait-il s'il vous plaît me donner quelques conseils sur la question?
php
namespaces
Shawn Northrop
la source
la source
Réponses:
L'
use
opérateur sert à donner des alias aux noms de classes, d'interfaces ou d'autres espaces de noms. La plupart desuse
instructions font référence à un espace de noms ou à une classe que vous souhaitez raccourcir:est équivalent à:
Si l'
use
opérateur est utilisé avec un nom de classe ou d'interface, il a les utilisations suivantes:L'
use
opérateur ne doit pas être confondu avec le chargement automatique . Une classe est chargée automatiquement (annulant le besoin deinclude
) en enregistrant un chargeur automatique (par exemple avecspl_autoload_register
). Vous voudrez peut-être lire PSR-4 pour voir une implémentation appropriée du chargeur automatique.la source
Si vous avez besoin de classer votre code dans des espaces de noms, utilisez simplement le mot-clé
namespace
:file1.php
Dans file2.php
Vous pouvez également utiliser
use
. Si dans file2 vous mettezuse foo\bar as mypath;
vous devez utiliser
mypath
au lieu debar
n'importe où dans le fichier:Utiliser
use foo\bar;
est égal àuse foo\bar as bar;
.la source