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:
function __autoload( $class
|
class
PRINTIT
{
$file = $class . '.class.php' ;
|
运行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' ;
|
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();🎜🎜🎜🎜🎜
将__autoload换成loadprint函数。但是loadprint不会像__autoload自动触发,这时spl_autoload_register()就起作用了,它告诉PHP碰到没有定义的类就执行loadprint()。
spl_autoload_register() 调用静态方法
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' ;
|
public
staticfunction$obj = new PRINTIT();
|
)
{
🎜🎜🎜🎜🎜🎜 🎜🎜$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. 🎜
🎜
🎜