Empfohlene Lösungen für einen Rückruf, dass Chains Mehrere Methoden Erstellen und / oder Eigenschaften?

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

Frage

Wir arbeiten an einem Interface Builder-Typ, dass im Grunde eine Liste Konstrukte zu tun CRUD Verwaltung einzelner Objekte (da wir Active verwenden ein Objekt == ein Datenbank-Datensatz).

Um die Spaltenwerte und Parameter für Listenoptionen, um die Angabe flexible wir ursprünglich die Callback-Argumente als Array implementiert, dass so aussah:

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

Diese Lösung stellt einige offensichtliche Nachteile nur in Bezug auf die Ungeschicklichkeit, etc., aber es hat funktioniert.

Auf Vorschlag eines Mitarbeiters haben wir die Umsetzung Schließungen versucht, aber aufgrund einer anderen Anforderung mit der Klasse, haben wir alle Daten in der Klasse serialisiert werden, die wir gerade erst mit Verschlüssen wird nicht funktionieren entdeckt. Die Syntax mit den Verschlüssen war offensichtlich viel einfacher:

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

So ist meine erste Frage ist, ob es eine Möglichkeit ist, den Verschluss in einem serializable Format zu speichern (wie ein String), und es dann zu einer Schließung konvertieren zurück, sobald die Klasse unserialisierten ist?

Oder kann jemand einen Vorschlag auf eine bessere Schnittstelle bieten für diese Art von Callback-Problem zu lösen?

War es hilfreich?

Lösung

Es gibt eine ausgezeichnete und detaillierte Post auf, wie Reflexion verwenden Closures zu erweitern zu tun, was Sie wollen: Ausziehbarer PHP 5.3 Verschlüsse mit Serialisierung und Reflection . Das heißt, ich frage mich, ob dies ist nicht weniger umständlich als die ursprüngliche Lösung, da Sie Objekte passieren stattdessen müssen werde -. Es effektiv kodifiziert es nur etwas anders und Sie können nur mit einem Leistungseinbußen am Ende

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top