2014-03-19 7 views
1

코드 샘플 1PHP를 사용하면 클래스를로드 할 때 추가 작업이 필요합니까?

use Outline\Drawing; 
$var = new Drawing(); 

코드 샘플 2

$var = new Outline\Drawing(); 

질문 :

합니까 PHP 만들 하드웨어 작업을 어렵게 (더 많은 파일을 찾아 이상의 처리를 할) 예제 1에서 코드를 사용한다면? 어느 코드와 어떤 레벨이 일치하더라도 어떤 종류의 클래스와 일치하는지 어떤 use 라인을 얻었는지 확실합니다. 나는 일어나고있는 것이 무엇인지 정확히 알고 싶다. 한마디로

다음 use 문장의 사용이를위한 있어야하는데 클래스 사이의 연결을 작업 할 때

  • 는 PHP는 무엇입니까?
  • PSR-0/PSR-4 오토로더는이 두 가지 코드 샘플에서 작동하는 방식에 영향을 줍니까? 이를 위해 있어야하는데 사용 문과 클래스의 사용 사이의 연결을 작업 할 때
+2

여기서 말하는 것은 [태그 : 마이크로 최적화]입니다. 말 그대로 수백만 클래스를로드하지 않는 한 그 차이는 거의 무시할 수있을 것입니다. – GordonM

+0

필자의 주요 관심사는 "파일 시스템에 Drawing.php라는 파일이 존재하면 PHP가 먼저 살펴보고, 그렇지 않다면 Outline \ Drawing.php를 찾습니다"그런 시스템 호출은 심각한 성능을 유발할 것입니다 문제, 그래서 나는 다른 일이 일어나는 것을 상상할 것이다. – Dennis

+0

이것이 마이크로 최적화라는 것에 동의하지만 PHP가 클래스를로드하는 방식은 먼저 네임 스페이스가 지정된 전체 클래스 이름을 확인한 다음로드하려고 시도하는 것입니다 (아직로드되지 않은 경우). 두 코드 샘플 모두 동일한 양의 파일을 검색하며 use 문의 추가 처리는 무시할 수없는 수준입니다. – T0xicCode

답변

3

는 PHP는 어떤 기능을 수행합니까?

use 문은 실제로 네임 스페이스/클래스를 파일에로드하지 않습니다. 단순히 네임 스페이스의 클래스를 참조하는 별칭 목록을 설정합니다.

아직 선언되지 않은 클래스가 발견되면 클래스 이름을 완전히 한정하려고 시도하는 별칭 목록을 사용합니다 (접두사 대체). 클래스의 별칭을 찾을 수없는 경우 현재 범위의 네임 스페이스를 사용하여 클래스 이름을 한정합니다.

클래스 이름이 정규화 된 경우에만 해당 PHP가 클래스를 자동로드 (클래스 정의가 완료된 다양한 자동 공급기 호출)하려고합니다.

PSR-0/PSR-4 오토로더는이 두 가지 코드 샘플에서 작동하는 방식에 영향을 줍니까?

아니요. 자동 로더는 코드 샘플의 차이로 작동하는 방식에 영향을주지 않습니다. php가 자동으로 동일한 매개 변수로 정확하게 동일한 방법을 호출하기 때문입니다.