PHP 의 autoLoad 자동 로드 메커니즘 을 말 해 보 세 요.

4249 단어 PHPautoLoad
__autoload 의 사용 방법 1:가장 자주 사용 하 는 방법 은 바로 이런 방법 입 니 다.클래스 이름 에 따라 클래스 파일 을 찾 은 다음 require원
 
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();
의 장점 은 클래스 이름과 파일 경 로 를 하나의 맵 으로 만 유지 하 는 것 입 니 다.따라서 파일 구조 가 바 뀌 었 을 때 클래스 이름 을 수정 하지 않 고 맵 에 대응 하 는 항목 만 수정 하면 됩 니 다.이 방법 은 앞의 방법 에 비해 파일 이 많 을 때 이 맵 을 유지 하 는 것 이 매우 번 거 로 운 것 이 단점 입 니 다.이 럴 때 제 이 슨 이나 단독 파일 로 유지 하 는 것 을 고려 할 수도 있 습 니 다.아마도 당신 은 프레임 워 크 를 사용 하여 이러한 맵 을 유지 하거나 만 들 생각 을 할 것 입 니 다.spl_autoload __autoload 의 가장 큰 결함 은 여러 개의 autoload 방법 이 있 을 수 없다 는 것 입 니 다.다음 상황 을 생각해 보 세 요.당신 의 프로젝트 는 다른 사람의 프로젝트 를 인용 하 였 습 니 다.당신 의 프로젝트 에는 가 있 습 니 다.autoload,남 의 프로젝트 에 도autoload,이렇게 두 개autoload 가 충돌 합 니 다.해결 방법 은 수정autoload 가 하나 가 되 는 것 은 의심 할 여지없이 매우 번 거 로 운 것 이다.따라서 우 리 는 autoload 호출 스 택 을 급히 사용 해 야 합 니 다.그러면 spl 의 autoload 시리즈 함수 가 나타 납 니 다.spl 사용 가능autoload_register 여러 사용자 정의 autoload 함 수 를 등록 합 니 다.PHP 버 전이 5.1 이상 이면 spl 을 사용 할 수 있 습 니 다.autoload 먼저 spl 의 몇 가지 함수 알 아 보기:splautoload 는autoload()의 기본 구현,includepath 에서$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();
Splautoload_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 == 'http'){
require_once("/home/yejianfeng/handcode/http.php");
}
});

$a = new http();
$a->callname();
splautoload_call 호출 splautoload_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 == 'http'){
require_once("/home/yejianfeng/handcode/http.php");
}
if($class == 'http2'){
require_once("/home/yejianfeng/handcode/http2.php");
}
});
spl_auto_call('http2');
$a = new http();
$a->callname(); // "this is http2"
splauto_register 이 함 수 는 우리 로 하여 금 를 사용 하지 않 게 한다.autoload,사용자 정의 함 수 를 사용 하여 자동 으로 불 러 오 는 것 이 가능 합 니 다.이 방법 은 현재 자주 사용 되 는 것 이다.Zend 의 AutoLoader 모듈 은 이 방법 을 사용 했다.그 중에서 해당 하 는 코드
 
spl_autoload_register(array(__CLASS__, 'autoload'));

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

}
를 발췌 하여 참고 하 는 글 을 추천 합 니 다.zend 의 autoload 체제 에 대해 앞 에 글https://www.jb51.net/article/31399.htm이 상세 하 게 분석 되 었 습 니 다.autoload 의 자동 로드 메커니즘 에 대해 이 글https://www.jb51.net/article/31279.htm은 매우 상세 하 게 말 하고 밑바닥 부터 분석 했다.

좋은 웹페이지 즐겨찾기