>  기사  >  백엔드 개발  >  PHP는 자동으로 객체를 로드합니다

PHP는 자동으로 객체를 로드합니다

伊谢尔伦
伊谢尔伦원래의
2016-11-23 14:20:141210검색

많은 개발자가 객체 지향 애플리케이션을 작성할 때 각 클래스 정의에 대한 PHP 소스 파일을 만듭니다. 각 스크립트의 시작 부분에 포함 파일의 긴 목록(클래스당 하나의 파일)을 작성해야 한다는 점은 큰 성가신 일입니다.

PHP 5에서는 더 이상 필요하지 않습니다. 아직 정의되지 않은 클래스를 사용하려고 할 때 자동으로 호출되는 __autoload() 함수를 정의할 수 있습니다. 이 함수를 호출하면 스크립팅 엔진은 PHP가 오류로 인해 실패하기 전에 필요한 클래스를 로드할 수 있는 마지막 기회를 갖게 됩니다.

spl_autoload_register()는 클래스 자동 로드를 구현하는 보다 유연한 방법을 제공합니다. 따라서 __autoload() 함수의 사용은 더 이상 권장되지 않으며 향후 버전에서는 더 이상 사용되지 않을 수 있습니다.

참고:

버전 5.3.0 이전에는 __autoload 함수에서 발생하는 예외를 catch 문 블록에서 포착할 수 없으며 치명적인 오류가 발생합니다. 5.3.0 이상부터 __autoload 함수에 의해 발생한 예외는 catch 문 블록에 의해 포착될 수 있지만 조건을 따라야 합니다. 사용자 정의 예외가 발생하는 경우 해당 사용자 정의 예외 클래스가 있어야 합니다. __autoload 함수는 사용자 정의 예외 클래스를 재귀적으로 자동으로 로드할 수 있습니다.

참고:

PHP의 CLI 대화형 모드에서는 자동 로딩을 사용할 수 없습니다.

예제 #1 자동 로드 예

이 예는 각각 MyClass1.php 및 MyClass2.php 파일에서 MyClass1 및 MyClass2를 로드하려고 시도합니다.

function __autoload($class_name){
require_once $class_name.'.php';
}
$obj = new MyClass1();
$obj2 = new MyClass2();

참고: MyClass1 .php 및 MyClass2.php는

예제 #2에 로드하려면 현재 스크립트와 동일한 디렉토리에 있어야 합니다.

이 예는 ITest 인터페이스를 로드하려고 시도합니다.

function __autoload($name) {
   var_dump($name);
}
class Foo implements ITest {
}
/*
string(5) "ITest"
Fatal error: Interface 'ITest' not found in ...
*/

예제 #3 PHP 5.3.0+에서 자동 로딩 예외 처리

이 예는 예외를 발생시키고 try/catch 문 블록에서 이를 보여줍니다.

function __autoload($name) {
   echo "Want to load $name.\n";
   throw new Exception("Unable to load $name.");
}
try {
   $obj = new NonLoadableClass();
} catch (Exception $e) {
   echo $e->getMessage(), "\n";
}

위 루틴은 다음을 출력합니다.

NonLoadableClass를 로드하고 싶습니다.
NonLoadableClass를 로드할 수 없습니다.

예 #4 PHP 5.3.0에서 자동 로딩 + 예외 처리 - 사용자 정의 예외 메커니즘 없음

이 예는 존재하지 않는 사용자 정의 예외 처리 기능에 예외를 발생시킵니다.

위 루틴은 다음을 출력합니다.

NonLoadableClass를 로드하고 싶습니다.
MissingException을 로드하고 싶습니다.

치명적인 오류: testMissingException.php에서 'MissingException' 클래스를 찾을 수 없습니다. 4번째 줄


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.