Heim > Backend-Entwicklung > PHP-Tutorial > Wie verwende ich die Funktionen spl_autoload_register() und __autoload() in PHP?

Wie verwende ich die Funktionen spl_autoload_register() und __autoload() in PHP?

WBOY
Freigeben: 2023-04-10 18:38:01
Original
3112 Leute haben es durchsucht

Im vorherigen Artikel habe ich Ihnen „Wie stellt man fest, ob ein Objekt zu einer Klasse in PHP gehört?“ vorgestellt. “, das im Detail die relevanten Kenntnisse vorstellt, die verwendet werden sollten, um zu bestimmen, ob ein Objekt zu einer Klasse in PHP gehört. In diesem Artikel werfen wir einen Blick auf den automatischen Lademechanismus in PHP. Hoffe, es hilft allen!

Wie verwende ich die Funktionen spl_autoload_register() und __autoload() in PHP?

Bei der täglichen Entwicklung und Nutzung besteht die Grundidee unserer objektorientierten Programmierung darin, dass es in der Regel üblich ist, für jede Klasse eine eigene PHP-Quelldatei zu erstellen. Dies erleichtert die spätere Wartung und ist zudem sehr komfortabel. Klassen einfach wiederverwenden.

In PHP kann die automatische Ladefunktion von Klassen über die Funktionen spl_autoload_register() und __autoload() implementiert werden, wodurch wir Programmierzeit und Energie sparen können. Dann stellen wir diese beiden Funktionen separat vor. 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){
    // 方法体
}
Nach dem Login kopieren

其中我们需要注意的是:

  • $class 为要加载的类名。

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

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

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

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

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

<?php
    class Demo{
    }
?>
Nach dem Login kopieren

其中我们需要注意的是:__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 ]]])
Nach dem Login kopieren

其中需要注意的是:

  • $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>< /code>Funktion
__autoload()-Funktion ist eine magische Methode, um genau zu sein. Wir beschreiben sie in „In fünf Minuten lernen Sie die magischen Methoden in PHP kennen (detaillierte Beispiele)

“ stellt einige häufig verwendete magische Methoden im Detail vor. Es wird erwähnt, dass sie automatisch aufgerufen werden, d. h. die Funktion muss unter aufgerufen werden spezifische Bedingungen.

Wenn wir eine Klasse neu erstellen und die Klasse in der aktuellen Quelldatei nicht gefunden werden kann, ruft PHP automatisch die Funktion __autoload() auf und übergibt den Klassennamen an die Funktion __autoload(). Dies ist die spezifische Bedingung für den Aufruf der Funktion __autoload(). Das Syntaxformat lautet wie folgt:

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

Was wir beachten müssen, ist:

$class ist das Name der zu ladenden Klasse.

🎜
  • 🎜__autoload() Die Funktion kann nur einmal in der aktuellen Quelldatei definiert werden. 🎜🎜
  • 🎜Wenn Sie die Funktion __autoload() verwenden möchten, um eine Klassendatei automatisch zu laden, muss der Name der Klassendatei mit dem Klassennamen identisch sein. Nur eine Klasse kann in einer anderen Klassendatei definiert werden. 🎜🎜🎜🎜 Schauen wir uns als Nächstes die Verwendung der Funktion __autoload() anhand eines Beispiels an. Das Beispiel sieht wie folgt aus: 🎜rrreee🎜Führen Sie den obigen Code aus und die Datei Demo.php im selben Verzeichnis wird automatisch geladen . Der Code in Demo.php lautet wie folgt: 🎜rrreee🎜Was wir beachten müssen, ist: Die Funktion __autoload() ist seit PHP7.2.0 veraltet und die Funktion spl_autoload_register() kann stattdessen verwendet werden. 🎜🎜<span style="font-size: 20px;"><strong><span style="font-size: 18px;">spl_autoload_register()</span></strong></span> Funktion🎜🎜spl_autoload_register() Die Funktion kann eine Funktion angeben, die die Funktion der Funktion __autoload() ersetzt.
    🎜rrreee🎜Was beachtet werden muss, ist:🎜
    • 🎜 $autoload_function: Der Funktionsname zum Ersetzen der Funktion __autoload(), die auch eine anonyme Funktion sein kann. Wenn keine Parameter angegeben werden, wird die Standardimplementierungsfunktion spl_autoload() von autoload automatisch registriert. 🎜🎜
    • 🎜$throw: wird verwendet, um festzulegen, ob die Funktion spl_autoload_register() ausgelöst wird, wenn $autoload_function nicht möglich ist erfolgreich registriert. Eine Ausnahme tritt auf; 🎜🎜
    • 🎜$prepend: Wenn es wahr ist, fügt die Funktion spl_autoload_register() die Funktion $autoload_function zum Kopf der Warteschlange hinzu am Ende der Warteschlange hinzugefügt. 🎜🎜🎜🎜Als nächstes schauen wir uns ein Beispiel an, das wie folgt aussieht: 🎜rrreee🎜Im obigen Beispiel wird die Funktion spl_autoload_register() verwendet, um eine andere Funktion anzugeben, die die Funktion __autoload() ersetzt. 🎜🎜Bei Interesse können Sie auf „🎜PHP-Video-Tutorial🎜“ klicken, um mehr über PHP-Kenntnisse zu erfahren. 🎜
  • Das obige ist der detaillierte Inhalt vonWie verwende ich die Funktionen spl_autoload_register() und __autoload() in PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Verwandte Etiketten:
    php
    Quelle:php.cn
    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
    Beliebte Tutorials
    Mehr>
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage