为什么在使用spl_autoload_register时需要unserialize_callback_func?

时间:2010-02-24 12:27:02

标签: php spl-autoload-call

ini_set('unserialize_callback_func', 'spl_autoload_call');

spl_autoload_register(array(self::getInstance(), 'autoload'));

为什么要像上面那样设置spl_autoload_call

我做了一个测试:

$serialized_object='O:1:"a":1:{s:5:"value";s:3:"100";}';

ini_set('unserialize_callback_func','mycallback');

function mycallback($classname) {
    echo 1;
}

function func2() 
{
    echo 2;
}

spl_autoload_register('func2');
unserialize($serialized_object);

输出结果为:

212

有人可以解释一下吗?

2 个答案:

答案 0 :(得分:16)

答案 1 :(得分:-1)

unserialize()需要在实际反序列化数据之前加载类定义。未加载类定义时调用unserialize_callback_func,并且spl_autoload_call尝试使用注册的所有自动加载器加载unserialize()所需的类。