У меня вопрос: если mycallback
является публичным методом класса C, как мы можем передать его в качестве параметра при вызове ini_set
?
Я думаю, что вы не можетесделать это для стандартной публичной функции объекта, потому что unserialize_callback_func
является строковым параметром, а обратный вызов объектной функции - Array
.
Но если вы сделаете ее публичной функцией static
, вы можете передать ее в виде строки:
class C
{
public static function mycallback($classname)
{
// just include a file containing your classdefinition
// you get $classname to figure out which classdefinition is required
}
}
ini_set('unserialize_callback_func', 'C::mycallback'); // set your callback_function
Что может быть лучшей альтернативой.В противном случае вы также можете обернуть его в стандартную функцию:
function c_mycallback_wrapper($classname)
{
$c = new C;
return $c->mycallback($classname);
}
ini_set('unserialize_callback_func', 'c_mycallback_wrapper');
Другой альтернативой является использование автозагрузки (например, spl_autoload_register
).unserialize
поддерживает автозагрузку, но я не знаю, помогает ли автозагрузка в вашем случае, часто это так.