Explication détaillée sur l'utilisation de la fonction spl_autoload_register() en PHP

墨辰丷
Libérer: 2023-03-29 10:22:01
original
13054 Les gens l'ont consulté

Cet article présente principalement l'utilisation de la fonction spl_autoload_register() en PHP et analyse les compétences d'utilisation associées de la fonction __autoload et de la fonction spl_autoload_register sous forme d'exemples. Les amis dans le besoin peuvent se référer au

manuel recommandé  : manuel d'auto-apprentissage complet php
Avant de comprendre cette fonction, regardons une autre fonction : __autoload.


1. __autoload

Il s'agit d'une fonction de chargement automatique en PHP5, lorsque nous instancions une classe non définie, cela sera déclenché. Regardez l'exemple suivant :

printit.class.php :

<?php
class PRINTIT {
 function doPrint() {
 echo &#39;hello world&#39;;
 }
}
?>
Copier après la connexion
index.php

<?
function __autoload( $class ) {
 $file = $class . &#39;.class.php&#39;;
 if ( is_file($file) ) {
 require_once($file);
 }
}
$obj = new PRINTIT();
$obj->doPrint();?>
Copier après la connexion
Après avoir exécuté index.php, hello world s'affiche normalement . Dans index.php, puisque printit.class.php n'est pas inclus, lors de l'instanciation de printit, la fonction __autoload est automatiquement appelée. La valeur du paramètre $class est le nom de la classe printit. À ce stade, printit.class.php est introduit. .

Cette méthode est souvent utilisée en orienté objet, ce qui permet d'éviter d'écrire trop de fichiers de référence et également de rendre l'ensemble du système plus flexible.

2. spl_autoload_register()

Regardez spl_autoload_register() à nouveau. Cette fonction a le même effet que __autoload. 🎜>

Remplacez __autoload par la fonction loadprint. Mais loadprint ne sera pas déclenché automatiquement comme __autoload. À ce stade, spl_autoload_register() fonctionnera. Il indique à PHP d'exécuter loadprint() lorsqu'il rencontre une classe non définie.

<?
function loadprint( $class ) {
 $file = $class . &#39;.class.php&#39;;
 if (is_file($file)) {
 require_once($file);
 }
}
spl_autoload_register( &#39;loadprint&#39; );
$obj = new PRINTIT();
$obj->doPrint();?>
Copier après la connexion
spl_autoload_register() appelle la méthode statique

spl_autoload_register
<?
class test {
 public static function loadprint( $class ) {
 $file = $class . &#39;.class.php&#39;;
 if (is_file($file)) {
  require_once($file);
 }
 }
}
spl_autoload_register( array(&#39;test&#39;,&#39;loadprint&#39;) );
//另一种写法:spl_autoload_register( "test::loadprint" );
$obj = new PRINTIT();
$obj->doPrint();?>
Copier après la connexion

(PHP 5 >= 5.1.2)

spl_autoload_register — Enregistrez la fonction __autoload()

Description

bool spl_autoload_register ([ callback $autoload_function ] )Enregistrez la fonction dans la pile de fonctions SPL __autoload. Activez les fonctions dans cette pile si elles ne sont pas déjà actives.

Si la fonction __autoload a été implémentée dans votre programme, elle doit être explicitement enregistrée dans la pile __autoload. Parce que la fonction spl_autoload_register() remplacera la fonction __autoload dans Zend Engine par spl_autoload() ou spl_autoload_call().

Paramètres

autoload_function

La fonction de chargement automatique à enregistrer. Si aucun paramètre n'est fourni, la fonction d'implémentation par défaut spl_autoload() d'autoload est automatiquement enregistrée.

Valeur de retour

Renvoie VRAI en cas de succès, FAUX en cas d'échec.

Remarque :

SPL est l'abréviation de Standard PHP Library. Il s'agit d'une bibliothèque d'extension introduite dans PHP5. Ses principales fonctions incluent l'implémentation du mécanisme de chargement automatique et de diverses interfaces ou classes Iterator. Le mécanisme de chargement automatique SPL est implémenté en pointant le pointeur de fonction autoload_func vers une fonction auto-implémentée avec fonction de chargement automatique.

SPL a deux fonctions différentes spl_autoload et spl_autoload_call Différents mécanismes de chargement automatique sont implémentés en pointant autoload_func vers ces deux adresses de fonction différentes.

Si vous utilisez spl_autoload_register pour enregistrer une méthode de classe et une fonction __autoload en même temps, cela sera basé sur l'ordre d'enregistrement si le fichier de classe est chargé dans la première méthode ou fonction enregistrée. , elle ne sera pas chargée. La méthode ou la fonction de la deuxième classe enregistrée sera exécutée. Sinon, la méthode ou la fonction de la deuxième classe enregistrée sera exécutée.

classLOAD
{
 staticfunctionloadClass($class_name)
  {
    $filename= $class_name.".class.php";
 $path= "include/".$filename
    if(is_file($path)) returninclude$path;
  }
}
/**
 * 设置对象的自动载入
 * spl_autoload_register — Register given function as __autoload() implementation
 */
spl_autoload_register(array(&#39;LOAD&#39;, &#39;loadClass&#39;));
/**
*__autoload 方法在 spl_autoload_register 后会失效,因为 autoload_func 函数指针已指向 spl_autoload 方法
* 可以通过下面的方法来把 _autoload 方法加入 autoload_functions list
*/
spl_autoload_register( &#39;__autoload&#39;);
Copier après la connexion

Résumé : Ce qui précède représente l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun.

<?php
class autoloader {
  public static $loader;
  public static function init() {
    if (self::$loader == NULL)
      self::$loader = new self ();
    return self::$loader;
  }
  public function __construct() {
    spl_autoload_register ( array ($this, &#39;model&#39; ) );
    spl_autoload_register ( array ($this, &#39;helper&#39; ) );
    spl_autoload_register ( array ($this, &#39;controller&#39; ) );
    spl_autoload_register ( array ($this, &#39;library&#39; ) );
  }
  public function library($class) {
    set_include_path ( get_include_path () . PATH_SEPARATOR . &#39;/lib/&#39; );
    spl_autoload_extensions ( &#39;.library.php&#39; );
    spl_autoload ( $class );
  }
  public function controller($class) {
    $class = preg_replace ( &#39;/_controller$/ui&#39;, &#39;&#39;, $class );
    set_include_path ( get_include_path () . PATH_SEPARATOR . &#39;/controller/&#39; );
    spl_autoload_extensions ( &#39;.controller.php&#39; );
    spl_autoload ( $class );
  }
  public function model($class) {
    $class = preg_replace ( &#39;/_model$/ui&#39;, &#39;&#39;, $class );
    set_include_path ( get_include_path () . PATH_SEPARATOR . &#39;/model/&#39; );
    spl_autoload_extensions ( &#39;.model.php&#39; );
    spl_autoload ( $class );
  }
  public function helper($class) {
    $class = preg_replace ( &#39;/_helper$/ui&#39;, &#39;&#39;, $class );
    set_include_path ( get_include_path () . PATH_SEPARATOR . &#39;/helper/&#39; );
    spl_autoload_extensions ( &#39;.helper.php&#39; );
    spl_autoload ( $class );
  }
}
//call
autoloader::init ();
?>
Copier après la connexion

Articles connexes recommandés :

1.Introduction au mécanisme de chargement automatique PHP - fonction spl_autoload_register(), chargement automatique de la classe PHP
2.
Comment utiliser spl_autoload_register pour implémenter l'autoloading automatique chargement Explication détaillée des exemples
Recommandations vidéo associées :
1.Tutoriel vidéo Dugu Jiujian (4)_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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!