Рекомендуемые решения для создания обратного вызова, которые цепи несколько методов и / или свойств?

StackOverflow https://stackoverflow.com/questions/3893080

Вопрос

Мы работаем над интерфейсом типа Builder, который в основном создает список для выполнения CRUD управления отдельными объектами (поскольку мы используем ActiveRecord Object == запись базы данных).

Чтобы указать значения столбца и параметры для параметров списка гибкими, мы первоначально реализовали аргументы обратного вызова как массив, который выглядел так:

'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; }
             )

Таким образом, мой первый вопрос заключается в том, есть ли способ хранить закрытие в сериализуемом формате (например, строку), а затем преобразовать его обратно в закрытие, как только класс несерьезно?

Или кто -нибудь может дать предложение о лучшем интерфейсе для решения такого рода проблемы обратного вызова?

Это было полезно?

Решение

Существует отличный и подробный пост о том, как использовать отражение, чтобы расширить закрытие, чтобы сделать то, что вы хотите: Удлинение PHP 5.3 Закрытия с сериализацией и отражением. Отказ Это сказано, мне интересно, есть ли это менее неловко, чем ваше исходное решение, поскольку вам придется пропускать объекты вместо этого - это эффективно просто кодифицирует его немного по-разному, и вы можете просто получить удар по производительности.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top