2010-04-27 4 views
1

나는 웹 프로그래밍에 익숙하다. 데스크톱에서 C# .net 플랫폼을 잘 사용한다. 나는 PHP와 PHP 프레임 워크를 이해하려고했지만 조금 혼란 스럽다. 나는 PHP 파일 require_once 기능을 가진 다른 PHP 파일에 파일에있는 클래스를 가져올 수 있습니다 이해합니다. 하지만 프레임 워크는 require_once 함수로 자신의 클래스를 가져 오지 않습니다. 나는 그들이 뭔가 다른 것을한다고 생각해. 나는 이해하지 못한다. 누군가 나에게 설명해 줄 수 있니?백그라운드에서 PHP와 자체 프레임 워크는 어떻게 작동합니까?

답변

2

대부분의 프레임 워크는 "자동로드"라는 기술을 사용하여 필요한 종속성을 자동으로 해결하고 포함시킵니다.

"자동 로더"는 알 수없는 클래스를 참조 할 때 PHP에서 호출하는 함수입니다. "Autoloader"는 절차 적으로 클래스를 만들거나 파일 이름을 기준으로 외부 파일에서 간단히 include 파일을 만들 수 있습니다.

올바른 방법 (PHP 5.1.2 이상)은 spl_autoload_register()을 사용하는 것입니다. 위의 예에서

function autoload_example($className) { 
    $normalizedName = strtolower($className); 

    if(file_exists('includes/' . $normalizedName . '.inc')) { 
    require_once('includes/' . $normalizedName . '.inc'); 
    } elseif(file_exists('includes/' . $normalizedName . '.inc')) { 
    require_once('includes/' . $normalizedName . '.php'); 
    } else { 
    die('Class ' . $className . ' not found'); 
    } 
} 

spl_autoload_register('autoload_example'); 

$myAwesomeObject = new Awesome(); 

,이 클래스 Awesome에 대한 참조를 칠 때 PHP는 "오토로더"autoload_example를 실행합니다 : 여기에 자동 로더의 예입니다.

"자동 공급기"는 먼저 파일 include/awesome.inc을 찾으려고 시도합니다. 발견 할 수 있다면 그것을 포함 할 것입니다.

그렇지 않은 경우 include/awesome.php이라는 파일을 찾습니다. 발견 할 수 있다면 그것을 포함 할 것입니다.

그렇지 않은 경우 die()은 내 Awesome 클래스를 찾을 수 없다는 것을 나타냅니다.

관련 문제