Мы работаем над интерфейсом типа Builder, который в основном создает список для выполнения CRUD-управления отдельными объектами (поскольку мы используем ActiveRecord объект == запись базы данных).
Чтобы сделать гибким задание значений столбца и параметров для параметров списка, мы первоначально реализовали аргументы обратного вызова в виде массива, который выглядел следующим образом:
'params' => array(
'static' => $this->institution->id,
array(
'method1' => array(
'method_name',
array('arg1', 'arg2')
),
'prop1' => 'id')
Это решение имеет ряд очевидных недостатков только с точки зрения неловкости и т. Д., Но оно сработало.
По предложению коллеги мы попытались реализовать замыкания, но из-за другого требования к классу мы должны сериализовать все данные в классе, которые, как мы только что обнаружили, не будут работать с замыканиями. Синтаксис с замыканиями был, очевидно, намного проще:
'params' => array(
$this->institution->id,
function($obj) { return $obj->method_name($arg1, $arg2)->id; }
)
Итак, мой первый вопрос: есть ли способ сохранить замыкание в сериализуемом формате (например, в строке), а затем преобразовать его обратно в замыкание после того, как класс не будет сериализован?
Или кто-нибудь может предложить более удобный интерфейс для решения такой проблемы с обратным вызовом?