php Legt eine anonyme Funktion in einer Instanz fest

7

Ich beginne gerade mit PHP und frage mich, ob es eine Möglichkeit gibt, einer Klasseninstanz eine anonyme Funktion hinzuzufügen.

Sagen wir zum Beispiel ...

%Vor%

Was ich hoffe, ist die Wiederverwendung des gleichen Codes in einer großen Anzahl verschiedener Anwendungen und die Möglichkeit, Funktionen in bestimmten Fällen einfach auszutauschen und zu ersetzen.

Ich verwende php5.3 (also sollten anonyme Funktionen funktionieren, nur nicht so, wie ich sie benutze).

Vielen Dank für Ihre Zeit!

-GK

    
geekay 13.06.2010, 21:50
quelle

7 Antworten

9

Sie können die magische Funktion __call verwenden Für diese Arbeit. Keine Schönheit, aber es funktioniert ..

so:

%Vor%     
Max Ruf 13.06.2010, 22:17
quelle
4
%Vor%     
user358390 13.06.2010 22:16
quelle
4

FWIW:

Die Behandlung von anonymen Funktionen durch PHP 5.3 ist unterhaltsam. Dies wird nicht funktionieren:

%Vor%

Das wird funktionieren:

%Vor%

Um dies zu umgehen, müssen Sie einen __call hack wie den zur Verfügung gestellt von Oden .

Dieses Verhalten kann sich in Zukunft ändern. Der Array-Dereferenzierungs-RFC war vor kurzem an den PHP-Stamm gebunden , und der Patch hat eine Diskussion über function call chaining , dessen Syntax erlaubt, was Sie ohne den __call hack machen wollen. Leider ist es nachweislich schwierig in der Vergangenheit , Funktionsaufrufe zu funktionieren.

    
Charles 14.06.2010 00:24
quelle
2

Klingt so, als würden Sie ein Strategie-Pattern oder Decorator Pattern - es gibt andere Wege , um dies auf eine Weise zu erreichen, die leichter mit anderen kommuniziert werden kann Entwickler, die Ihren Code gelesen haben.

    
Paul Dixon 13.06.2010 22:11
quelle
1

Sie können etwas in diese Richtung tun (was auch mit Callbacks funktioniert, die keine Closures sind):

%Vor%

was HelloWorld here ergibt.

Das heißt, Sie sollten auch die Vererbung oder das Dekorationsmuster in Betracht ziehen.

    
Artefacto 13.06.2010 22:10
quelle
1

Dies ist kein Problem mehr durch PHP 7;

%Vor%

Sehen Sie mehr über AST .

    
K-Gun 09.03.2016 00:22
quelle
0

Anstatt eine __call magic-Methode in Ihre Klasse einzufügen, können Sie stattdessen die aufrufbare Funktion direkt mit call_user_func ausführen.

%Vor%

Offensichtlich wäre es schön, wenn PHP eine Syntax bietet, um dies direkt auszuführen.

    
Lee Davis 04.03.2014 12:14
quelle