>  기사  >  백엔드 개발  >  PHP에서 spl_autoload_register() 및 __autoload() 함수를 사용하는 방법은 무엇입니까?

PHP에서 spl_autoload_register() 및 __autoload() 함수를 사용하는 방법은 무엇입니까?

WBOY
WBOY원래의
2021-10-26 18:11:283044검색

이전 글에서 "PHP에서 객체가 클래스에 속하는지 어떻게 판단하나요?"를 가져왔습니다. "에서는 객체가 PHP의 클래스에 속하는지 여부를 결정하는 데 사용해야 하는 관련 지식을 자세히 소개합니다. 이 기사에서는 PHP의 자동 로딩 메커니즘을 살펴보겠습니다. 모두에게 도움이 되기를 바랍니다!

PHP에서 spl_autoload_register() 및 __autoload() 함수를 사용하는 방법은 무엇입니까?

일상적인 개발 및 사용에서 우리 객체 지향 프로그래밍의 기본 아이디어는 일반적으로 각 클래스에 대해 별도의 PHP 소스 파일을 생성하는 것이 관례입니다. 이는 후속 유지 관리를 용이하게 하고 또한 매우 편리합니다. 수업을 쉽게 재사용할 수 있습니다.

PHP에서는 spl_autoload_register() __autoload() 함수를 통해 클래스 자동 로딩 기능을 구현할 수 있어 프로그래밍 시간과 에너지를 절약할 수 있습니다. 그럼 이 두 가지 기능을 개별적으로 소개하겠습니다. spl_autoload_register() __autoload() 函数来实现类的自动加载功能,这样可以节省我们的编程时间和精力。那接下来我们就分别来介绍一下这两个函数吧。

<span style="font-size: 20px;"><strong><span style="font-size: 18px;">__autoload()</span></strong></span>函数

__autoload()函数准确来说它是魔术方法,我们在《五分钟带你了解PHP中的魔术方法(实例详解)》中详细的介绍了一些常用的魔术方法,其中讲到,它是自动调用的,也就是需要早特定条件下才会调用函数。

当我们 new 一个类时,如果当前源文件中找不到这个类,PHP 则会自动调用 __autoload() 函数,并将类名传递给 __autoload() 函数。这就是__autoload()函数调用的特定条件。它的语法格式如下:

function __autoload($class){
    // 方法体
}

其中我们需要注意的是:

  • $class 为要加载的类名。

  • __autoload() 函数在当前源文件中只能定义一次。

  • 想要使用 __autoload() 函数自动加载类文件,类文件的名称需要与类名相同,另外一个类文件中只能定义一个类。

接下来我们通过示例来看一下__autoload() 函数的使用,示例如下:

<?php
    function __autoload($class){
        $file = &#39;./&#39;.$class.&#39;.php&#39;;
        include_once($file);
    }
    $obj = new Demo();
?>

运行上面的代码,会自动加载同目录下的 Demo.php 文件,Demo.php 中的代码如下所示:

<?php
    class Demo{
    }
?>

其中我们需要注意的是:__autoload() 函数自 PHP7.2.0 起已被弃用,可以使用 spl_autoload_register() 函数代替。

<span style="font-size: 20px;"><strong><span style="font-size: 18px;">spl_autoload_register()</span></strong></span> 函数

spl_autoload_register()函数可以指定一个函数来替代__autoload()函数的功能,

spl_autoload_register([$autoload_function [, $throw = true [, $prepend = false ]]])

其中需要注意的是:

  • $autoload_function:要替代 __autoload() 函数的函数名称,也可以是一个匿名函数。如果没有提供任何参数,则自动注册 autoload 的默认实现函数 spl_autoload();

  • $throw:用来设置 $autoload_function 无法成功注册时,spl_autoload_register() 函数是否抛出异常;

  • $prepend

    <span style="font-size: 20px;"><strong><span style="font-size: 18px;">__autoload()</span></strong></span>기능
__autoload() 함수는 "5분 안에 PHP의 매직 메소드를 이해하도록 안내합니다(자세한 예시)

"에서는 일반적으로 사용되는 몇 가지 매직 메소드를 자세히 소개합니다. 자동으로 호출된다는 점, 즉 아래에서 함수를 호출해야 한다고 언급되어 있습니다. 특정 조건.

클래스를 새로 만들 때 현재 소스 파일에서 클래스를 찾을 수 없으면 PHP는 자동으로 __autoload() 함수를 호출하고 클래스 이름을 __autoload() 함수에 전달합니다. 이는 __autoload() 함수가 호출되는 특정 조건입니다. 구문 형식은 다음과 같습니다:

<?php
    spl_autoload_register(&#39;loadClass&#39;);
    function loadClass($class){
        $file = &#39;./&#39;.$class.&#39;.php&#39;;
        include_once($file);
    }
    $obj = new Demo();
?>

우리가 주의해야 할 것은:

$class는 로드할 클래스 이름.

🎜
  • 🎜__autoload() 이 함수는 현재 소스 파일에서 한 번만 정의할 수 있습니다. 🎜🎜
  • 🎜 __autoload() 함수를 사용하여 클래스 파일을 자동으로 로드하려면 클래스 파일 이름과 클래스 이름이 동일해야 합니다. 다른 클래스 파일에 정의되어야 합니다. 🎜🎜🎜🎜다음으로 예제를 통해 __autoload() 함수의 사용법을 살펴보겠습니다. 예제는 다음과 같습니다. 🎜rrreee🎜위 코드를 실행하면 같은 디렉터리에 있는 Demo.php 파일이 자동으로 로드됩니다. Demo.php의 코드는 다음과 같습니다. 🎜rrreee🎜주의해야 할 점은: __autoload() 함수는 PHP7.2.0부터 더 이상 사용되지 않으며, 대신 spl_autoload_register() 함수를 사용할 수 있다는 것입니다. 🎜🎜<span style="font-size: 20px;"><strong><span style="font-size: 18px;">spl_autoload_register()</span></strong></span> 기능🎜🎜spl_autoload_register() 이 함수는 __autoload() 함수의 함수를 대체하는 함수를 지정할 수 있습니다.
    🎜rrreee🎜주의해야 할 점은:🎜
    • 🎜 $autoload_function: __autoload() 함수를 대체할 함수 이름입니다. 이 함수는 익명 함수일 수도 있습니다. 매개변수가 제공되지 않으면 자동 로드의 기본 구현 함수 spl_autoload()가 자동으로 등록됩니다. 🎜🎜
    • 🎜$throw: $autoload_function을 수행할 수 없을 때 spl_autoload_register() 함수를 실행할지 여부를 설정하는 데 사용됩니다. 성공적으로 등록되었습니다. 🎜🎜
    • 🎜$prepend: true인 경우 spl_autoload_register() 함수는 대기열의 헤드에 $autoload_function 함수를 추가합니다. 대기열의 꼬리에 추가되었습니다. 🎜🎜🎜🎜다음으로 다음과 같은 예를 살펴보겠습니다. 🎜rrreee🎜위 예에서 spl_autoload_register() 함수는 __autoload() 함수를 대체할 다른 함수를 지정하는 데 사용됩니다. 🎜🎜관심이 있으시면 "🎜PHP 비디오 튜토리얼🎜"을 클릭하여 PHP 지식에 대해 자세히 알아볼 수 있습니다. 🎜
  • 위 내용은 PHP에서 spl_autoload_register() 및 __autoload() 함수를 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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