Maison > Article > développement back-end > Comment utiliser les fonctions spl_autoload_register() et __autoload() en PHP ?
Dans l'article précédent, je vous ai présenté "Comment déterminer si un objet appartient à une classe en PHP ?" ", qui présente en détail les connaissances pertinentes qui doivent être utilisées pour déterminer si un objet appartient à une classe en PHP. Dans cet article, nous examinerons le mécanisme de chargement automatique en PHP. J'espère que cela aidera tout le monde !
Dans le développement et l'utilisation quotidiens, l'idée de base de notre programmation orientée objet est qu'il est généralement d'usage de créer un fichier source PHP distinct pour chaque classe. Cela facilitera la maintenance ultérieure et est également très pratique. Réutilisez facilement les cours.
En PHP, la fonction de chargement automatique des classes peut être implémentée via les fonctions spl_autoload_register()
et __autoload()
, ce qui peut économiser notre temps et notre énergie de programmation. Présentons ensuite ces deux fonctions séparément. 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 = './'.$class.'.php'; 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>Fonction
__autoload()
est une méthode magique pour être précis. Nous la décrivons dans "Vous fait comprendre les méthodes magiques en PHP en cinq minutes (exemples détaillés) " présente en détail certaines méthodes magiques couramment utilisées. Il est mentionné qu'elle est automatiquement appelée, c'est-à-dire que la fonction doit être appelée sous conditions spécifiques.
Lorsque nous créons une classe, si la classe est introuvable dans le fichier source actuel, PHP appellera automatiquement la fonction __autoload()
et transmettra le nom de la classe à la fonction __autoload(). C'est la condition spécifique pour que la fonction __autoload() soit appelée. Son format de syntaxe est le suivant :
<?php spl_autoload_register('loadClass'); function loadClass($class){ $file = './'.$class.'.php'; include_once($file); } $obj = new Demo(); ?>
Ce à quoi nous devons faire attention est : $class
est le classe à charger nom.
__autoload()
La fonction ne peut être définie qu'une seule fois dans le fichier source actuel. 🎜🎜 __autoload()
pour charger automatiquement un fichier de classe, le nom du fichier de classe doit être le même que le nom de la classe. Une seule classe peut le faire. être défini dans un autre fichier de classe. 🎜🎜🎜🎜Ensuite, jetons un œil à l'utilisation de la fonction __autoload() à travers un exemple L'exemple est le suivant : 🎜rrreee🎜Exécutez le code ci-dessus et le fichier Demo.php dans le même répertoire sera automatiquement chargé. . Le code dans Demo.php est le suivant. Montré : 🎜rrreee🎜Ce à quoi nous devons prêter attention est : la fonction __autoload() est obsolète depuis PHP7.2.0, et la fonction spl_autoload_register() peut être utilisée à la place. 🎜🎜<span style="font-size: 20px;"><strong><span style="font-size: 18px;">spl_autoload_register()</span></strong></span> Fonction🎜🎜spl_autoload_register() La fonction peut spécifier une fonction pour remplacer la fonction de la fonction __autoload(),
🎜rrreee🎜Ce qu'il faut noter est :🎜
- 🎜
$autoload_function
: Le nom de la fonction pour remplacer la fonction __autoload(), qui peut également être une fonction anonyme. Si aucun paramètre n'est fourni, la fonction d'implémentation par défaut spl_autoload() de autoload est automatiquement enregistrée 🎜🎜
- 🎜
$throw
: utilisée pour définir si la fonction spl_autoload_register() est lancée lorsque $autoload_function ne peut pas être lancé ; enregistré avec succès. Une exception se produit ; 🎜🎜
- 🎜
$prepend
: Si c'est vrai, la fonction spl_autoload_register() ajoutera la fonction $autoload_function en tête de la file d'attente, sinon elle le sera. ajouté à la queue de la file d’attente. 🎜🎜🎜🎜Jetons ensuite un coup d'œil à un exemple, qui est le suivant : 🎜rrreee🎜Dans l'exemple ci-dessus, la fonction spl_autoload_register() est utilisée pour spécifier une autre fonction pour remplacer la fonction __autoload(). 🎜🎜Si vous êtes intéressé, vous pouvez cliquer sur "🎜Tutoriel vidéo PHP🎜" pour en savoir plus sur les connaissances PHP. 🎜
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!