PHP5부터 클래스 파일에 대한 참조를 자동으로 포함할 수 있는 자동 로드 인터셉터 방법이 도입되었습니다. 아래의 구체적인 사용법을 참조하세요.
PHP 개발 과정에서 외부에서 클래스를 도입하려는 경우 일반적으로 include 및 require 메소드를 사용하여 클래스를 정의하는 파일을 포함하게 되지만 이로 인해 파일이 내부에 포함될 수 있습니다. 파일을 참조하는 새 스크립트에는 많은 수의 include 또는 require 메소드 호출이 있습니다. 실수로 이를 생략하면 오류가 발생하여 코드를 유지하기가 어려워집니다.
PHP5부터 클래스 파일에 대한 참조를 자동으로 포함할 수 있는 자동 로드 인터셉터 메서드가 도입되었습니다. 일반적으로 다음과 같이 작성합니다.
function autoload($className) { include_once $className . '.class.php'; } $user = new User();
PHP 엔진이 알 수 없는 클래스 작업을 인스턴스화하려고 하면 autoload()를 호출합니다. 메서드를 사용하면 PHP가 오류로 인해 실패하기 전에 필요한 클래스를 로드할 수 있는 마지막 기회를 얻을 수 있습니다. 따라서 위의 코드가 실행되면 PHP 엔진은 실제로 자동으로 autoload 메소드를 실행하고 User.class.php 파일을 포함시킵니다.
자동 로드 함수에서 발생한 예외는 catch 문 블록에서 포착할 수 없으며 치명적인 오류로 이어집니다.
PHP의 CLI 대화형 모드를 사용하는 경우 자동 로딩 메커니즘이 실행되지 않습니다.
예를 들어 PEAR 스타일 명명 규칙을 사용하려면 User/Register.php 파일을 가져와야 하며 다음과 같이 구현할 수도 있습니다.
//加载我 function autoload($className) { $file = str_replace('_', DIRECTORY_SEPARATOR, $className); include_once $file . 'php'; } $userRegister = new User_Register();
이 방법은 편리하지만 여러 클래스 라이브러리가 도입된 경우 대규모 애플리케이션에서는 다양한 클래스 라이브러리의 자동 로드 메커니즘으로 인해 일부 설명할 수 없는 문제가 발생할 수 있습니다. PHP5에 SPL 표준 라이브러리가 도입된 후 spl_autoload_register() 함수라는 새로운 솔루션이 생겼습니다.
이 함수의 기능은 SPL의 자동 로드 함수 스택에 함수를 등록하고 시스템 기본 autoload() 함수를 제거하는 것입니다. 일단 spl_autoload_register() 함수가 호출되면 정의되지 않은 클래스가 호출되면 시스템은 자동으로 autoload() 함수를 호출하는 대신 spl_autoload_register() 함수에 등록된 모든 함수를 순차적으로 호출하게 됩니다. 다음 예제에서는 User/Register.php를 호출합니다. 대신 User_Register.class.php:
코드 복사코드는 다음과 같습니다.
//不加载我 function autoload($className) { include_once $className . '.class.php'; } //加载我 function autoload($className) { $file = str_replace('/', DIRECTORY_SEPARATOR, $className); include_once $file . '.php'; } //开始加载 spl_autoload_register('autoload'); $userRegister = new User_Register();
spl_autoload_register()를 사용할 때 더 안전한 초기화 호출 방법을 사용할 수도 있습니다. 다음을 참조하세요. 코드는 다음과 같습니다.
//系统默认autoload函数 function autoload($className) { include_once $className . '.class.php'; } //可供SPL加载的autoload函数 function autoload($className) { $file = str_replace('_', DIRECTORY_SEPARATOR, $className); include_once $file . '.php'; } //不小心加载错了函数名,同时又把默认autoload机制给取消了……囧 spl_autoload_register('_autoload', false); //容错机制 if(false === spl_autoload_functions()) { if(function_exists('autoload')) { spl_autoload_register('autoload', false); } }
위 내용은 PHP의 자동 로드 자동 로딩 메커니즘의 사용 예에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!