Как сериализовать объект, который имеет закрытие внутри свойств?

если я serialize($obj) , я получаю:

Сериализация «Закрытие» не допускается

Можно ли игнорировать эти замыкания при сериализации? Я не нуждаюсь в них, когда я все равно не инициализую строку (значение этих свойств может быть нулевым или каким-либо другим).

Мой класс выглядит так:

 Class Node{ protected $attrs = array(); } 

$attrs – ассоциативный массив, который может содержать некоторые элементы, которые являются замыканиями, например $attrs['validator'] = function(){...}

Related of "Как сериализовать объект, который имеет закрытие внутри свойств?"

Я написал функцию, которая позволяет сериализовать любое Exception . Это делается путем сглаживания сложных значений в обратном направлении.

Источник:

https://gist.github.com/Thinkscape/805ba8b91cdce6bcaf7c

Применение:

 <?php try { // exception gets thrown here, ie // throw new Exception(); } catch (Exception $exception) { flattenExceptionBacktrace($exception); $serialized = serialize($exception); $unserialized = unserialize($serialized); print_r($unserialized->getTraceAsString()); } 

Это просто: вы не можете. Закрытие не является сериализуемым. Если вы хотите создать «нечто похожее», вы можете использовать объекты класса, реализующие __invoke() вместо закрытия.

Если вам не нужны блокировки (или вы можете их воссоздать самостоятельно, а неэтериализовать), вы можете реализовать Serializable и не принимать во внимание во время сериализации. Этот интерфейс (реализация serialize() и unserialize() ) должен быть предпочтительнее __sleep() / __wakeup() .

обеспечить собственную реализацию методов sleep () и _wakeup