Maison  >  Article  >  développement back-end  >  Explication détaillée sur l'utilisation de la fonction spl_autoload_register() en PHP

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

墨辰丷
墨辰丷original
2018-06-01 17:25:5913075parcourir

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;;
 }
}
?>
index.php

<?
function __autoload( $class ) {
 $file = $class . &#39;.class.php&#39;;
 if ( is_file($file) ) {
 require_once($file);
 }
}
$obj = new PRINTIT();
$obj->doPrint();?>
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();?>
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();?>

(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;);

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 ();
?>

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!

Déclaration:
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