Home >Backend Development >PHP Tutorial >Detailed explanation of spl_autoload_register function

Detailed explanation of spl_autoload_register function

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-07-28 08:26:56959browse

Before understanding this function, let’s look at another function: __autoload.

1. __autoload

This is an automatic loading function. In PHP5, when we instantiate an undefined class, this function will be triggered. Look at the following example:

printit.class.php 

 

<?php

.php
classprintit.class

function<?php

echo ;

}

}

?> 

 

index.php 

 

<?

function __autoload( $class

class

PRINTIT {
$file = $class . '.class.php';

if ( is_file($file

require_once($file);

}

}

$obj = new PRINTIT();

$obj->doPrint();

?>

运行index.php后正常输出hello world。在index.php中,由于没有包含printit.class.php,在实例化printit时,自动调用__autoload函数,参数$class的值即为类名printit,此时printit.class.php就被引进来了。  

在面向对象中这种方法经常使用,可以避免书写过多的引用文件,同时也使整个系统更加灵活。  

二、spl_autoload_register()  

再看spl_autoload_register(),这个函数与__autoload有与曲同工之妙,看个简单的例子:  

  

 

<?

function loadprint( $class

function

doPrint() {
$file = $class . '.class.php';

if (is_file($file

echo
require_once($file);

}

}

spl_autoload_register( 'loadprint' );

;
$obj = new PRINTIT();'hello world'
🎜🎜🎜🎜🎜🎜🎜🎜🎜?> 🎜🎜 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜index.php 🎜🎜🎜🎜🎜🎜🎜🎜🎜 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜<?🎜🎜 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜function🎜 🎜__autoload(🎜🎜$class🎜🎜) {🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜$file🎜🎜=🎜🎜$class🎜🎜. 🎜🎜'.class.php'🎜🎜; 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜 🎜🎜if🎜🎜(🎜🎜is_file🎜🎜(🎜🎜$file🎜🎜) ) { 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜 🎜🎜require_once🎜🎜(🎜🎜$file🎜🎜); 🎜🎜🎜🎜🎜🎜🎜 🎜🎜}🎜🎜🎜🎜🎜🎜🎜 🎜🎜🎜🎜🎜} 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜 🎜= 🎜🎜new🎜 🎜PRINTIT();🎜🎜🎜🎜🎜🎜🎜🎜 🎜🎜🎜🎜$obj🎜🎜->doPrint();🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜?>🎜🎜🎜🎜🎜🎜🎜 🎜🎜After running index.php, hello world will be output normally. In index.php, since printit.class.php is not included, when instantiating printit, the __autoload function is automatically called. The value of the parameter $class is the class name printit. At this time, printit.class.php is introduced. . 🎜🎜This method is often used in object-oriented, which can avoid writing too many reference files and also make the entire system more flexible. 🎜🎜2. spl_autoload_register() 🎜🎜Look at spl_autoload_register() again. This function has the same effect as __autoload. Let’s look at a simple example: 🎜🎜🎜 🎜🎜 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜<?🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜function🎜 🎜loadprint( 🎜🎜$class🎜🎜) {🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜$file🎜🎜=🎜🎜$class🎜🎜. 🎜🎜'.class.php'🎜🎜; 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜 🎜🎜if🎜🎜(🎜🎜is_file🎜🎜(🎜🎜$file🎜🎜)) { 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜 🎜🎜require_once🎜🎜(🎜🎜$file🎜🎜); 🎜🎜🎜🎜🎜🎜 🎜🎜🎜🎜🎜🎜🎜🎜} 🎜🎜🎜🎜🎜🎜🎜🎜 🎜🎜🎜🎜} 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜spl_autoload_register(🎜 🎜'loadprint'🎜🎜); 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜$obj🎜 🎜= 🎜🎜new🎜 🎜PRINTIT();🎜🎜🎜🎜🎜

$obj->doPrint();

?>

将__autoload换成loadprint函数。但是loadprint不会像__autoload自动触发,这时spl_autoload_register()就起作用了,它告诉PHP碰到没有定义的类就执行loadprint()。 

spl_autoload_register() 调用静态方法 

  

 

<?

class$obj->doPrint();

 public static function loadprint( $class?>

Replace __autoload with the loadprint function. But loadprint will not be triggered automatically like __autoload. At this time, spl_autoload_register() will work. It tells PHP to execute loadprint() when it encounters an undefined class.
spl_autoload_register() calls static method   $file $class '.class.php';  

  if (is_file($file

   require_once($file);  

  

 }

<?

array('test','loadprint'

test {
class

public

static
function$obj = new PRINTIT();

$obj->doPrint();

loadprint($class
?>
) {

🎜🎜🎜🎜🎜🎜 🎜🎜$file🎜🎜= 🎜🎜$class🎜🎜. 🎜🎜'.class.php'🎜🎜; 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜 🎜🎜if🎜🎜(🎜🎜is_file🎜🎜(🎜🎜$file🎜🎜)) { 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜 🎜🎜require_once🎜🎜(🎜🎜$file🎜🎜); 🎜🎜🎜🎜🎜🎜 🎜🎜🎜🎜🎜🎜 🎜🎜} 🎜🎜🎜🎜🎜🎜🎜🎜 🎜🎜🎜🎜 🎜🎜}🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜} 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜spl_autoload_register( 🎜🎜array🎜🎜(🎜🎜'test'🎜🎜,🎜🎜'loadprint'🎜🎜) );🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜//Another way of writing: spl_autoload_register( "test::loadprint" ); 🎜PRINTIT();🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜 $obj🎜🎜->doPrint();🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜?>🎜🎜🎜🎜🎜🎜🎜🎜 🎜 The above has introduced the detailed explanation of the spl_autoload_register function, including the relevant aspects. I hope it will be helpful to friends who are interested in PHP tutorials. 🎜 🎜 🎜
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn