PHP中spl_autoload_register()和__autoload()区别分析
关于spl_autoload_register()和__autoload(),相信大多数都会选择前者了? 看两者的用法:
//__autoload用法
function __autoload($classname)
{
$filename = "./class/".$classname.".class.php";
if (is_file($filename))
{
include $filename;
}
}
//spl_autoload_register用法
spl_autoload_register('load_class');
function load_class($classname)
{
$filename = "./class/".$classname.".class.php";
if (is_file($filename))
{
include $filename;
}
}
使用spl_autoload_register()的好处是不可言喻的:
(1)自动加载对象更加方便,很多框架都是这样做的:
class classautoloader {
public function __construct() {
spl_autoload_register(array($this, 'loader'));
}
private function loader($classname) {
echo 'trying to load ', $classname, ' via ', __method__, "()\n";
include $classname . '.php';
}
}
$autoloader = new classautoloader();
$obj = new class1();
$obj = new class2();
(2)你要知道__autoload()函数只能存在一次啊,spl_autoload_register()当然能注册多个函数
function a () {
include 'a.php';
}
function b () {
include 'b.php';
}
spl_autoload_register('a');
spl_autoload_register('b');
(3)spl函数很丰富,提供了更多功能,如spl_autoload_unregister()注销已经注册的函数、spl_autoload_functions()返回所有已经注册的函数等。
详见php参考手册:关于spl函数列表.
注意:
如果在你的程序中已经实现了__autoload函数,它必须显式注册到__autoload栈中。因为
spl_autoload_register()函数会将zend engine中的__autoload函数取代为spl_autoload() 或 spl_autoload_call()
/**
*__autoload 方法在 spl_autoload_register 后会失效,因为 autoload_func 函数指针已指向 spl_autoload 方法
* 可以通过下面的方法来把 _autoload 方法加入 autoload_functions list
*/
spl_autoload_register( '__autoload' );
如对本文有疑问,
点击进行留言回复!!
相关文章:
-
-
-
网安追踪流程
1.不用代理网民发帖流程:发帖人 → ISP → 服务器托管商 → 服务器网警追踪流程:网监 → 服务器IP →...
[阅读全文]
-
-
-
HTTP状态码大全
转自:https://www.cnblogs.com/lxinxuan/archive/2009/10/22/1...
[阅读全文]
-
-
-
-
-
网友评论