PHP 네임 스페이스 및 "사용"


120

네임 스페이스와 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'를 찾을 수 없습니다.

누군가가 문제에 대해 약간의 지침을 줄 수 있습니까?


또한이 주제와 관련된 - stackoverflow.com/questions/33341955/...
피터

답변:


169

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 를 읽을 수 있습니다 .


그래서 내가 bootstrap.php라는 다른 파일을 만들고 $ circle = new Circle (); 여기에 Circle.php가 포함되어 있지만 오류가 발생합니다. 치명적 오류 : 6 행의 ... / Circle.php에서 클래스 'Shape'를 찾을 수 없습니다. Circle.php를로드하는 것처럼 보이지만 Shape.php를로드하지 않습니다. Circle is defined as : 클래스 Circle extends Shape 구현 ShapeInterface
Shawn Northrop

위의 클래스에서 네임 스페이스를 제거하면 자동 로더가 제대로 작동합니다. 그러나 셰이프 클래스의 인터페이스에 네임 스페이스가있을 때 위의 오류가 발생합니다
Shawn Northrop

1
예제를 제공하기 위해 요점만들었습니다 . 불행히도 요점은 하위 폴더를 가질 수 없습니다. bootstrap.php를 폴더에 넣고 다른 클래스를 'Shape'라는 하위 폴더에 넣습니다.
cmbuckley

13

코드를 네임 스페이스로 정렬해야하는 경우 다음 키워드를 사용하십시오 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;.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.