>  기사  >  백엔드 개발  >  PHP의 autoLoad 자동 로딩 메커니즘 분석

PHP의 autoLoad 자동 로딩 메커니즘 분석

不言
不言원래의
2018-06-13 10:23:421306검색

이 기사에서는 주로 PHP의 자동 로드 메커니즘에 대한 분석을 소개합니다. 이제 이를 여러분과 공유합니다. 도움이 필요한 친구들이 참조할 수 있습니다.

PHP의 자동 로드에는 일반적으로 __autoload 및 spl 메서드가 있습니다. . 이 두 가지 방법은 사용 방법이 다릅니다

__autoload의 사용 방법 1:
가장 일반적으로 사용되는 방법은 클래스 이름을 기준으로 클래스 파일을 찾은 다음 require_one

function __autoload($class_name) { 
$path = str_replace('_', '/', $class_name); 
require_once $path . '.php'; 
} 
// 这里会自动加载Http/File/Interface.php 文件 
$a = new Http_File_Interface();

이 방법의 장점은 다음과 같습니다. 간단하고 사용하기 쉽습니다. 물론 단점도 있는데, 클래스 이름과 파일 경로가 강제로 일치해야 한다는 점은 파일 구조를 수정하면 클래스 이름도 수정해야 한다는 점이다.

__autoload 사용법 2 (직접 매핑 방식)

$map = array( 
'Http_File_Interface' => 'C:/PHP/HTTP/FILE/Interface.php' 
); 
function __autoload($class_name) { 
if (isset($map[$class_name])) { 
require_once $map[$class_name]; 
} 
} 
// 这里会自动加载C:/PHP/HTTP/FILE/Interface.php 文件 
$a = new Http_File_Interface();

이 방법의 장점은 매핑으로만 클래스명과 파일 경로를 유지하므로 파일 구조가 변경될 때 수정할 필요가 없다는 점입니다. 클래스 이름, 매핑에서 해당 항목만 수정하면 됩니다.
이전 방법에 비해 이 방법의 단점은 파일이 너무 많을 때 이 매핑을 유지하는 것이 매우 번거롭다는 것입니다. 아마도 이때 유지 관리를 위해 json이나 별도의 파일을 사용하는 것을 고려할 것입니다. 어쩌면 그러한 매핑을 유지하거나 생성하기 위해 프레임워크를 사용하는 것을 생각할 수도 있습니다.
spl_autoload
__autoload의 가장 큰 결점은 여러 자동 로드 방법을 가질 수 없다는 것입니다.
다음 시나리오를 생각해 보세요. 여러분의 프로젝트에는 __autoload가 있고 다른 사람의 프로젝트에도 있습니다. 하나의 __autoload이므로 두 개의 __autoload가 충돌합니다. 해결책은 __autoload를 수정하여 하나로 만드는 것인데, 이는 의심할 여지 없이 매우 번거로운 작업입니다.
그래서 자동 로드 호출 스택을 긴급하게 사용해야 하므로 spl의 자동 로드 시리즈 기능이 나타납니다. spl_autoload_register를 사용하여 여러 사용자 정의 자동 로드 기능을 등록할 수 있습니다.
PHP 버전이 5.1보다 큰 경우 spl_autoload를 사용할 수 있습니다.
먼저 spl의 여러 기능을 이해하세요.
PHP의 autoLoad 자동 로딩 메커니즘 분석

spl_autoload는 _autoload()의 기본 구현입니다. include_path의 $class_name(.php/.inc)
Spl_autoload는 자동 로딩을 구현합니다:

/*http.php*/ 
<?php 
class http 
{ 
public function callname(){ 
echo "this is http"; 
} 
} 
/*test.php*/ 
<?php 
set_include_path("/home/yejianfeng/handcode/"); //这里需要将路径放入include 
spl_autoload("http"); //寻找/home/yejianfeng/handcode/http.php 
$a = new http(); 
$a->callname();

Spl_autoload_register

SPL __autoload 함수 스택에 함수를 등록합니다. 예제를 직접 살펴보겠습니다.

/*http.php*/ 
<?php 
class http 
{ 
public function callname(){ 
echo "this is http"; 
} 
} 

/*test.php*/ 
<?php 
spl_autoload_register(function($class){ 
if($class == &#39;http&#39;){ 
require_once("/home/yejianfeng/handcode/http.php"); 
} 
}); 

$a = new http(); 
$a->callname(); 


spl_autoload_call

에 등록된 spl_autoload_register를 호출합니다. 함수, 아래 예를 참조하세요.

/*http.php*/ 
<?php 
class http 
{ 
public function callname(){ 
echo "this is http"; 
} 
} 
/*http2.php*/ 
<?php 
class http 
{ 
public function callname(){ 
echo "this is http2"; 
} 
} 

/*test.php*/ 
<?php 
spl_autoload_register(function($class){ 
if($class == &#39;http&#39;){ 
require_once("/home/yejianfeng/handcode/http.php"); 
} 
if($class == &#39;http2&#39;){ 
require_once("/home/yejianfeng/handcode/http2.php"); 
} 
}); 
spl_auto_call(&#39;http2&#39;); 
$a = new http(); 
$a->callname(); //这个时候会输出"this is http2"

spl_auto_register 이 함수를 사용하면 __autoload를 사용하지 않고도 자동 로딩을 위한 사용자 정의 함수를 사용할 수 있습니다. 이 방법은 이제 일반적으로 사용됩니다.
Zend의 AutoLoader 모듈은 이 방법을 사용합니다. 해당 코드를 추출하세요

spl_autoload_register(array(__CLASS__, &#39;autoload&#39;)); 

public static function autoload($class) 
{ 
….. 

}

위 내용은 모두의 학습에 도움이 되기를 바랍니다. 더 많은 관련 내용은 PHP 중국어 홈페이지를 주목해주세요!

관련 권장 사항:

DateTime 클래스를 기반으로 PHP에서 Unix 타임스탬프 및 날짜를 ​​변환하는 문제를 해결하는 방법

html_entity_decode를 사용하여 php에서 이스케이프되는 HTML 엔터티 구현

위 내용은 PHP의 autoLoad 자동 로딩 메커니즘 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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