네임 스페이스와 use
문에 약간의 문제가 있습니다 .
나는 세 개의 파일이 있습니다 ShapeInterface.php
, Shape.php
하고 Circle.php
.
상대 경로를 사용하여 이것을 시도하고 있으므로 모든 클래스에 이것을 넣었습니다.
namespace Shape;
내 서클 클래스에는 다음이 있습니다.
namespace Shape;
//use Shape;
//use ShapeInterface;
include 'Shape.php';
include 'ShapeInterface.php';
class Circle extends Shape implements ShapeInterface{ ....
include
진술을 사용하면 오류가 발생하지 않습니다. use
진술을 시도하면 다음을 얻습니다.
치명적인 오류 : 8 행의 /Users/shawn/Documents/work/sites/workspace/shape/Circle.php에서 클래스 ‘Shape \ Shape’를 찾을 수 없습니다.
누군가가 문제에 대해 약간의 지침을 줄 수 있습니까?
답변
use
연산자 클래스, 인터페이스 또는 다른 네임 스페이스의 이름에 별명을주는 것이다. 대부분의 use
명령문은 단축하려는 네임 스페이스 또는 클래스를 참조합니다.
use My\Full\Namespace;
다음과 같습니다.
use My\Full\Namespace as Namespace;
// Namespace\Foo is now shorthand for My\Full\Namespace\Foo
는 IF use
연산자는 클래스 또는 인터페이스 이름으로 사용되며, 다음과 같은 용도로 사용 :
// after this, "new DifferentName();" would instantiate a My\Full\Classname
use My\Full\Classname as DifferentName;
// global class - making "new ArrayObject()" and "new \ArrayObject()" equivalent
use ArrayObject;
use
연산자와 혼동되어서는 안된다 자동 로딩 . 클래스는 오토로더 include
를 등록 (예 :)하여 자동로드됩니다 (필요 없음 spl_autoload_register
). 적합한 자동 로더 구현을보기 위해 PSR-4 를 읽을 수 있습니다 .
답변
코드를 네임 스페이스로 정렬해야하는 경우 다음 키워드를 사용하십시오 namespace
.
file1.php
namespace foo\bar;
file2.php에서
$obj = new \foo\bar\myObj();
당신은 또한 사용할 수 있습니다 use
. file2에 넣으면
use foo\bar as mypath;
파일 mypath
의 bar
아무 곳에 나 대신 사용해야 합니다.
$obj = new mypath\myObj();
사용 use foo\bar;
은 use foo\bar as bar;
.