2012-11-29 2 views
5

PHP에서 종속 클래스를로드하는 올바른 방법과 모범 사례에 대해 의심스러워합니다.PHP에서 종속성을로드하는 올바른 방법은 무엇입니까?

일반적으로 Java 가져 오기와 비슷한 방법으로 각 클래스의 시작 부분에 모든 종속성을 include_once과 함께 넣습니다. 다음과 같음 :

include_once 'dto/SomeObjectDTO.php;' 
include_once 'dao/SomeObjectDAO.php;' 
include_once 'util/SomeObjectUtil.php;' 

class SomeObjectService{ 
    #class code here 
} 

클래스를로드하는 가장 좋은 방법은 무엇입니까? 아니면 Bootstrap.php에 모든 수업을로드 하시겠습니까? 다른 방법들?

프레임 워크와 같은 복잡한 외부 클래스가 아니라 내 자신의 클래스를로드하는 것에 대해 설명합니다.

+4

오토로더를 사용하는 것이 일반적으로 오늘날의 베스트 프랙티스로 간주됩니다 –

+0

PHP는 매우 빠릅니다 ...이 방법을 사용할 수도 있습니다 .... –

답변

2

는 자동 로딩은 PHP의 종속 로딩 메커니즘에 내장입니다.

PHP-FIG은 PSR이라는 PHP 코딩 표준 계열을 제안했습니다. PSR-0은 클래스 이름 지정과 자동 로딩을 다룹니다. 여기에 몇 가지 링크가 있습니다 : A good article on the subject

  • Requirements and an example autoloader
  • 는 또한, 명심, 그 자동 로딩은 가격으로 제공됩니다. 많은 문자열 작업이 있으며 제안 된 기본 자동 로더의 fs로 작업합니다 (사용자가 더 빠른 자동 로더를 구현할 수는 있지만 표준과 일치하지는 않습니다). 이렇게하면 많은 클래스를로드해야 할 때 자동로드가 느려집니다. 따라서 2 개의 클래스 만로드해야한다면 더 빠르고 이해하기 쉬울 것입니다.

2

PHP는 자동로드 메소드를 등록 할 수 있습니다. Symfony 2는 좋은 클래스를 포함하고 있습니다.

http://php.net/manual/en/function.spl-autoload-register.php

는 우리가 작성한 라이브러리와 함께 작동하도록 적응했습니다.

https://github.com/homer6/altumo/blob/master/source/php/loader.php

https://github.com/homer6/altumo/blob/master/source/php/Utils/UniversalClassLoader.php

이 적응이 같은 폴더 이름을 가지고 최상위 네임 스페이스를 필요로하지 않는 네임 스페이스를 가질 수 있습니다.

1
set_include_path(get_include_path() 
     . PATH_SEPARATOR . 'path1' 
     . PATH_SEPARATOR . 'path2' 
); 

// auto load classes: 
function autoloadClasses($className) { 
require_once $className . '.php'; 
} 

spl_autoload_register('autoloadClasses'); 
관련 문제