PHP의 자동 로드는 일반적으로 자동 로드와 spl 메서드의 두 가지 방법을 사용할 수 있습니다. 이 두 가지 방법은 사용 방법이 다릅니다
자동 로드의 사용 방법 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();
이 방법의 장점은 간단하고 사용하기 쉽다는 것입니다. 물론 단점도 있는데, 클래스 이름과 파일 경로가 강제로 일치해야 한다는 점은 파일 구조를 수정하면 클래스 이름도 수정해야 한다는 점이다.
오토로드 사용법 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
자동 로드의 가장 큰 결점은 여러 자동 로드 방법을 가질 수 없다는 것입니다.
좋아요, 다음 시나리오를 생각해 보세요. 프로젝트에 다른 사람의 프로젝트가 있습니다. 프로젝트에는 자동 로드도 있으므로 두 자동 로드가 충돌합니다. 해결책은 자동 로드를 하나로 수정하는 것인데, 이는 의심할 여지 없이 매우 번거로운 일입니다.
그래서 spl의 자동 로드 시리즈 기능이 나타나도록 자동 로드 호출 스택을 긴급하게 사용해야 합니다. spl_autoload_register를 사용하여 여러 사용자 정의 자동 로드 기능을 등록할 수 있습니다.
PHP 버전이 5.1보다 큰 경우 spl_autoload를 사용할 수 있습니다.
먼저 spl의 여러 기능을 이해하세요.
spl_autoload는 _autoload() 구현의 기본값입니다. 자동 로딩을 구현하려면 include_path
Spl_autoload에서 $class_name(.php/.inc)을 찾으세요.
코드는 다음과 같습니다.
/*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 자동 로드 함수 스택에 함수를 등록하고 직접 참조하세요. 예:
코드는 다음과 같습니다.
/*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();
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 == '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"
spl_auto_register 이 함수를 사용하면 자동 로드가 가능하지만 사용자 정의 기능을 사용하여 자동 로드를 가능하게 합니다. 이 방법은 이제 일반적으로 사용됩니다.
Zend의 AutoLoader 모듈은 이 방법을 사용합니다. 해당 코드를 발췌합니다
코드는 다음과 같습니다.
spl_autoload_register(array(CLASS, 'autoload')); public static function autoload($class) { ….. }
위 내용은 autoLoad 자동 로딩 메커니즘의 간단한 사용 튜토리얼의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!