spl_autoload_register()函数的作用

复习__autoload的时候,看到了spl_autoload_register()这个函数。但是一下子没有弄明白,通过查资料我算是弄明白了。

1.__autoload()    ——    自动加载函数

我把很多个类文件以 类名.class.php的形式存放在class目录中,在class的同级目录中建立一个index.php。进入class目录里面分别建立class1.class.php、class2.class.php、class3.class.php文件,分别为里面的文件添加一下代码

<?php
//class1.class.php中
class class1{
	public function __construct(){
		echo "class1";
	}
}
?>

<?php
//class2.class.php中
class class2{
	public function __construct(){
		echo "class2";
	}
}
?>

<?php
//class3.class.php中
class class3{
	public function __construct(){
		echo "class3";
	}
}
?>

index.php文件中写入

<?php
function __autoload($classname){
	$filename = "./class/".$classname.".class.php";
	if(is_file($filename)){
		include $filename;
	}
}

$test1 = new class1();
echo '<br/>';
$test1 = new class2();
echo '<br/>';
$test1 = new class3();

//结果是
class1
class2
class3

?>

我们成功的自动加载了class下面所有的要加载的类。

2.spl_autoload_register()    ——    注册__autoload()函数

class里面的文件不做任何改变,只是简单的改写一下index.php

<?php
// 写一个loadclass函数
// loadclass函数不具备自动加载类的功能
function loadclass($classname){
	$filename = "./class/".$classname.".class.php";
	if(is_file($filename)){
		include $filename;
	}
}
// spl_autoload_register()函数让这个loadclass具备了自动加载类的功能
spl_autoload_register("loadclass");

$test1 = new class1();
echo '<br/>';
$test1 = new class2();
echo '<br/>';
$test1 = new class3();
?>

至于性能上面,我没有过多的发言权,发现很多框架里面都是用的spl_autoload_register(),既然大家都用自然有他的道理,我先留着这个疑问吧。

posted @ 2020-09-21 12:16  void9main  阅读(214)  评论(0编辑  收藏  举报