>  기사  >  백엔드 개발  >  PHP의 자동 로드 자동 로딩 메커니즘의 사용 예에 ​​대한 자세한 설명

PHP의 자동 로드 자동 로딩 메커니즘의 사용 예에 ​​대한 자세한 설명

伊谢尔伦
伊谢尔伦원래의
2017-07-01 09:33:351405검색

PHP5부터 클래스 파일에 대한 참조를 자동으로 포함할 수 있는 자동 로드 인터셉터 방법이 도입되었습니다. 아래의 구체적인 사용법을 참조하세요.

PHP 개발 과정에서 외부에서 클래스를 도입하려는 경우 일반적으로 includerequire 메소드를 사용하여 클래스를 정의하는 파일을 포함하게 되지만 이로 인해 파일이 내부에 포함될 수 있습니다. 파일을 참조하는 새 스크립트에는 많은 수의 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); 
} 
}

Unix/Linux 환경에서 여러 개의 작은 클래스가 있고 관리의 편의를 위해 모두 PHP 파일로 작성된 경우 ln -을 사용하여 소프트 링크로 빠르게 배포할 수 있습니다. s 명령. 자동 로드 메커니즘을 통해 서로 다른 클래스 이름의 여러 복사본이 로드됩니다.

위 내용은 PHP의 자동 로드 자동 로딩 메커니즘의 사용 예에 ​​대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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