이 글은 php자동 로딩메커니즘에 대한 자세한 분석과 소개입니다. 필요한 친구들은 참고하시면 됩니다
1. php
에서 자동 로딩을 구현하는 방법 1. require_once , include_once수동으로 로드하세요. 2. 자동 로드를 위해 자동 로드 사용
3. 자동 로드를 위해 spl의 자동 로드 사용
수동 로드 구현:
require_once 'a.php'; require_once 'b.php'; require_once 'c.php';
그런데 로딩할 파일이 많은데 이게 괜찮을까요? 10, 20 require_one 또는 그 이상을 작성해야 할 경우 어떻게 해야 합니까?
자동 로드 로딩 구현:
테스트 디렉토리에 다음 내용으로 in.php 파일을 생성합니다.
echo '我是test下面的in.php<br />';그런 다음 테스트 디렉터리에 다음 내용으로 loader.php를 만듭니다.
// 需要重载autoload方法,自定义包含类文件的路径 function autoload($classname) { $class_file = strtolower($classname).".php"; if (file_exists($class_file)){ require_once($class_file); } } @$test = new in(); // 执行到这里会输出 <SPAN style="FONT-FAMILY: Arial, Helvetica, sans-serif">我是test下面的in.php</SPAN>
문제 없습니다. 작동했습니다! 로딩을 위해 다른 파일을 생성할 수도 있지만, 필요한 파일이 많아 디렉토리로 나누어야 할 경우 어떻게 해야 할까요?
function autoload($class_name) { $map = array( 'index' => './include/index.php', 'in' => './in.php' ); if (file_exists($map[$class_name]) && isset($map[$class_name])) { require_once $map[$class_name]; } } new index();
이 방법의 장점은 클래스 이름과 파일 경로가 매핑으로만 유지되므로 파일 구조가 변경될 때 클래스 이름을 수정할 필요가 없으며, 매핑에서 해당 항목만 수정하면 됩니다. 괜찮습니다.
spl의 자동 로드 로딩 구현:
spl의 자동 로드 기능 시리즈는 자동 로드 호출 스택을 사용하여 spl_autoload_register를 사용하여 다양한 애플리케이션 시나리오에서 여러 사용자 정의 자동 로드 기능을 등록할 수 있습니다.
• test 디렉터리 test 디렉터리 아래에 다음 내용으로 in.php를 생성합니다
<?php class in { public function index() { echo '我是test下面的in.php'; } } ?>
test 디렉터리 아래에 다음 내용으로 loader.php를 생성합니다
<?php set_include_path("/var/www/test/"); //这里需要将路径放入include spl_autoload("in"); //寻找/var/www/test/in.php $in = new in(); $in->index();
•spl_autoload_register는 SPL 자동 로드 함수 스택에 함수를 등록하고, loader.php
function AutoLoad($class){ if($class == 'in'){ require_once("/var/www/test/in.php"); } } spl_autoload_register('AutoLoad'); $a = new in(); $a->index();
•spl_autoload_register는 여러 사용자 정의 자동 로드 함수의 응용 프로그램을 등록합니다
먼저 mods 폴더를 생성합니다 test 디렉터리를 만들고 다음 내용으로 inmod.mod.php를 만듭니다.
<?php class inmod { function construct() { echo '我是mods下的in'; } }
그런 다음 test 디렉터리에 libs 폴더를 만들고 다음 내용으로 inlib.lib.php를 만듭니다.
<?php class inlib { function construct() { echo '我是libs下的in'; } }
마지막으로 다음 내용으로 테스트 디렉터리에 loader.php를 생성합니다
<?php class Loader { /** * 自动加载类 * @param $class 类名 */ public static function mods($class) { if($class){ set_include_path( "/var/www/test/mods/" ); spl_autoload_extensions( ".mod.php" ); spl_autoload( strtolower($class) ); } } public static function libs($class) { if($class){ set_include_path( "/var/www/test/libs/" ); spl_autoload_extensions( ".lib.php" ); spl_autoload( strtolower($class) ); } } } spl_autoload_register(array('Loader', 'mods')); spl_autoload_register(array('Loader', 'libs')); new inmod();//输出<SPAN style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 14px">我是mods下的in</SPAN> new inlib();//<SPAN style="FONT-FAMILY: Arial, Helvetica, sans-serif">输出</SPAN><SPAN style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 14px">我是libs下的in</SPAN>
위 내용은 PHP 자동 로딩 메커니즘에 대한 심층 연구의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!