[php] PHP 네임 스페이스 및 “사용”

네임 스페이스와 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;

파일 mypathbar아무 곳에 나 대신 사용해야 합니다.

$obj  = new mypath\myObj();

사용 use foo\bar;use foo\bar as bar;.


답변