Soluciones recomendadas para la creación de una devolución de llamada que las cadenas de múltiples métodos y / o propiedades?

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

Pregunta

Estamos trabajando en una interfaz de tipo Builder que básicamente construye una lista para hacer la gestión ABM de objetos individuales (ya que estamos utilizando un objeto ActiveRecord == un registro de base de datos).

Con el fin de hacer que la especificación de los valores de las columnas y los parámetros para las opciones de la lista flexibles que hemos implementado originalmente los argumentos de devolución de llamada como una matriz que se parecía a esto:

'params' => array(
              'static' => $this->institution->id, 
              array(
                'method1' => array(
                                'method_name', 
                                array('arg1', 'arg2')
                             ), 
                             'prop1' => 'id')

Esta solución presenta algunos inconvenientes obvios sólo en términos de incomodidad, etc., pero funcionó.

A sugerencia de un compañero de trabajo, hemos tratado de cierres de ejecución, pero debido a otro requisito con la clase, tenemos que serializar todos los datos en la clase de la que sólo hemos descubierto no funcionará con cierres. La sintaxis con los cierres era obviamente mucho más simple:

'params' => array(
               $this->institution->id,
               function($obj) { return $obj->method_name($arg1, $arg2)->id; }
             )

Así que mi primera pregunta es si hay una manera de almacenar el cierre en un formato serializable (como una cadena) y luego volver a convertirlo en un cierre una vez que la clase es decodificado?

o cualquiera puede proporcionar una sugerencia en una interfaz mejor para resolver este tipo de problema de devolución de llamada?

¿Fue útil?

Solución

Hay una excelente y post detallada sobre cómo utilizar la reflexión para extender Cierres para hacer lo que desee: Extensión de PHP 5.3 Cierres con la serialización y reflexión . Dicho esto, me pregunto si esto es menos incómodo que su solución original, ya que tendrá que pasar objetos en su lugar -. Eficazmente Solo codifica un poco diferente y que sólo podría terminar con un impacto en el rendimiento

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top