Mam mały problem z przestrzeniami nazw i use
instrukcjami.
Mam trzy pliki: ShapeInterface.php
, Shape.php
i Circle.php
.
Próbuję to zrobić za pomocą ścieżek względnych, więc umieściłem to we wszystkich klasach:
namespace Shape;
W mojej klasie w kręgu mam:
namespace Shape;
//use Shape;
//use ShapeInterface;
include 'Shape.php';
include 'ShapeInterface.php';
class Circle extends Shape implements ShapeInterface{ ....
Jeśli korzystam z include
oświadczeń, nie otrzymuję żadnych błędów. Jeśli spróbuję use
wyciągów, które otrzymuję:
Błąd krytyczny: nie znaleziono klasy „Shape \ Shape” w /Users/shawn/Documents/work/sites/workspace/shape/Circle.php w wierszu 8
Czy ktoś mógłby mi udzielić kilku wskazówek w tej sprawie?
php
namespaces
Shawn Northrop
źródło
źródło
Odpowiedzi:
use
Operator jest za danie aliasów do nazw klas, interfejsów lub innych nazw. Większośćuse
instrukcji odnosi się do przestrzeni nazw lub klasy, którą chcesz skrócić:jest równa:
Jeśli
use
operator jest używany z nazwą klasy lub interfejsu, ma następujące zastosowania:use
Operator nie należy mylić z automatycznego ładowania . Klasa jest ładowana automatycznie (co wyklucza potrzebęinclude
) przez zarejestrowanie autoloadera (np. Zspl_autoload_register
). Możesz przeczytać PSR-4, aby zobaczyć odpowiednią implementację autoloadera.źródło
Jeśli chcesz uporządkować swój kod w przestrzeniach nazw, po prostu użyj słowa kluczowego
namespace
:plik1.php
W pliku file2.php
Możesz także użyć
use
. Jeśli w pliku2 umieściszuse foo\bar as mypath;
musisz użyć
mypath
zamiastbar
gdziekolwiek w pliku:Używanie
use foo\bar;
jest równeuse foo\bar as bar;
.źródło