>백엔드 개발 >PHP 튜토리얼 >PHP 자동 로딩 메커니즘 소개 - spl_autoload_register() 함수, PHP 클래스 자동 로딩

PHP 자동 로딩 메커니즘 소개 - spl_autoload_register() 함수, PHP 클래스 자동 로딩

angryTom
angryTom앞으로
2019-10-14 18:10:174846검색

* include와 require의 기능은 동일합니다. 차이점은 include는 오류가 발생할 때만 경고를 생성하는 반면, require는 오류를 발생시키고 스크립트를 종료한다는 것입니다.

* include_once와 include의 유일한 차이점은 include_once가 파일이 도입되었는지 여부를 확인하고, 그렇다면 다시 도입되지 않는다는 것입니다.

spl_autoload_register() 함수는 정의되지 않은 클래스의 자동 로딩을 구현하는 중요한 방법입니다. 소위 자동 로딩은 새 클래스를 만들 때 먼저 클래스 파일을 포함하거나 요구해야 함을 의미합니다. include 또는 require가 없으면 오류가 보고됩니다. 그런 다음 파일 헤더에 많은 include 또는 require 파일을 작성해야 하는데 이는 매우 번거로운 작업입니다.

include 또는 require 클래스가 없는 경우 새 클래스를 정상으로 만들기 위해 다음과 같은 방법이 있습니다. 즉, 새 클래스는 일반적으로 클래스 파일을 미리 포함하지 않고도 새 클래스가 될 수 있으므로 파일 헤더에 많은 include(require)가 포함될 필요가 없습니다. 사실 이것은 일종의 캡슐화입니다!

spl_autoload_register 함수를 사용하면 위의 기능을 구현할 수 있습니다. 구현 원리를 살펴보겠습니다.

이 함수의 매개 변수는 다음과 같습니다.

첫 번째 매개 변수: autoload_function #🎜 🎜#

함수 [메서드] 이름으로, 문자열 또는 배열일 수 있습니다(클래스 메서드를 호출하는 데 사용됨). 이 함수(메서드)의 기능은 new가 필요한 클래스 파일을 포함(requeire)하여 new를 사용할 때 해당 파일이 발견되지 않도록 하는 것이다. 실제로 이는 전체 프로젝트의 포함 및 요구 기능을 캡슐화합니다.

두 번째 매개변수: throw

이 매개변수는 autoload_function을 성공적으로 등록할 수 없을 때 spl_autoload_register()에서 예외를 발생시킬지 여부를 설정합니다.

세 번째 매개변수: prepend

true인 경우 spl_autoload_register()는 대기열의 꼬리 대신 대기열의 머리에 함수를 추가합니다. 대기열.

새 클래스를 생성하고 클래스 파일이 포함되지 않은 경우 이 autoload_function 메서드가 실행됩니다.

먼저 오류 예를 살펴보겠습니다. ++++++ + ++++++++++++++

<?php
//当我们直接new一个未包含class类文件时候会报错
$objDemo = new AutoloadClass();

spl_autoload_register() 함수를 올바르게 사용하세요

다음을 통해 예를 들어 새로운 클래스가 포함되지 않은 경우 첫 번째 매개변수 함수 이름인 spl_autoload_register의 함수가 실행되는 것을 볼 수 있습니다. 이 함수에는 new가 필요한 클래스 이름인 매개변수가 있습니다. 이 클래스를 포함하면(클래스 이름과 파일 이름이 일치함) 자동 로딩 기능을 실현할 수 있습니다. 원리는 그리 복잡하지 않습니다.

<?php
// 定义工具类在服务器位置 常量
define(&#39;TOOLS_ROOT&#39;, __DIR__ . &#39;/&#39;);
 
//文件 autoloadClass.php ,需要new的文件
class AutoloadClass{
 
    public function __construct()
    {
        // echo &#39;你已经包含我了&#39;;
    }
}
//文件autoloadDemo.php文件
spl_autoload_register(&#39;myAutoLoad&#39;, true, true);
function myAutoLoad($className){
    $classFileName = TOOLS_ROOT."{$className}.php";
    include $classFileName;
}

또한 익명 함수로 변경하여 구현할 수 있습니다.

<?php
 
// 定义工具类在服务器位置 常量
define(&#39;TOOLS_ROOT&#39;, __DIR__ . &#39;/&#39;);
 
//文件 autoloadClass.php ,需要new的文件
class AutoloadClass{
 
    public function __construct()
    {
        // echo &#39;你已经包含我了&#39;;
    }
}
spl_autoload_register(function ($className)
{
    $classFileName = TOOLS_ROOT."{$className}.php";
    include $classFileName;
}, true, true);
$objDemo = new AutoloadClass();

더 많은 PHP 관련 지식을 보려면 #🎜을 방문하세요. 🎜#PHP 중국어 웹사이트

!

위 내용은 PHP 자동 로딩 메커니즘 소개 - spl_autoload_register() 함수, PHP 클래스 자동 로딩의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 www.whmblog.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제