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 phpAvant 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 'hello world'; } } ?>
<? function __autoload( $class ) { $file = $class . '.class.php'; if ( is_file($file) ) { require_once($file); } } $obj = new PRINTIT(); $obj->doPrint();?>
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 . '.class.php'; if (is_file($file)) { require_once($file); } } spl_autoload_register( 'loadprint' ); $obj = new PRINTIT(); $obj->doPrint();?>
<? class test { public static function loadprint( $class ) { $file = $class . '.class.php'; if (is_file($file)) { require_once($file); } } } spl_autoload_register( array('test','loadprint') ); //另一种写法: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('LOAD', 'loadClass')); /** *__autoload 方法在 spl_autoload_register 后会失效,因为 autoload_func 函数指针已指向 spl_autoload 方法 * 可以通过下面的方法来把 _autoload 方法加入 autoload_functions list */ spl_autoload_register( '__autoload');
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, 'model' ) ); spl_autoload_register ( array ($this, 'helper' ) ); spl_autoload_register ( array ($this, 'controller' ) ); spl_autoload_register ( array ($this, 'library' ) ); } public function library($class) { set_include_path ( get_include_path () . PATH_SEPARATOR . '/lib/' ); spl_autoload_extensions ( '.library.php' ); spl_autoload ( $class ); } public function controller($class) { $class = preg_replace ( '/_controller$/ui', '', $class ); set_include_path ( get_include_path () . PATH_SEPARATOR . '/controller/' ); spl_autoload_extensions ( '.controller.php' ); spl_autoload ( $class ); } public function model($class) { $class = preg_replace ( '/_model$/ui', '', $class ); set_include_path ( get_include_path () . PATH_SEPARATOR . '/model/' ); spl_autoload_extensions ( '.model.php' ); spl_autoload ( $class ); } public function helper($class) { $class = preg_replace ( '/_helper$/ui', '', $class ); set_include_path ( get_include_path () . PATH_SEPARATOR . '/helper/' ); spl_autoload_extensions ( '.helper.php' ); 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 exemplesRecommandations 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!