Die korrekte Art, Delegierte oder Rückrufe in PHP auszuführen

8

Ich muss das folgende Muster in PHP implementieren:

%Vor%

Was ist der richtige Weg?

P.S.

Ich habe call_user_func für diesen Zweck benutzt und glaube es oder nicht, es war in der Lage, private Klassenmitglieder anzurufen, aber nach einigen Wochen der Entwicklung habe ich festgestellt, dass es nicht mehr funktioniert. War es ein Fehler in meinem Code oder war es etwas anderes, das mich denken ließ, dass 'call_user_func' in der Lage ist, private Klassenfunktionen aufzurufen? Ich weiß es nicht, aber jetzt suche ich nach einer einfachen, schnellen und eleganten Methode das private Klassenmitglied von einer anderen Klasse aufrufen. Ich suche gerade nach Schließungen, habe aber Probleme mit '$ this' innerhalb der Schließung ...

    
Lu4 03.01.2011, 11:54
quelle

2 Antworten

4

Wenn jemand interessiert ist, habe ich die einzig mögliche Lösung über ReflectionMethod gefunden. Die Verwendung dieser Methode mit PHP 5.3.2 führt zu einer Leistungseinbuße und ist 2,3 mal langsamer als der direkte Aufruf des Klassenmembers und nur 1,3 mal langsamer als die Methode call_user_func. Also in meinem Fall ist es absolut akzeptabel. Hier ist der Code, wenn jemand interessiert:

%Vor%     
Lu4 03.01.2011, 22:03
quelle
4

Callbacks in PHP sind in den meisten anderen Sprachen nicht wie Callbacks. Typische Sprachen stellen Rückrufe als Zeiger dar, während PHP sie als Zeichenfolgen darstellt. Es gibt keine "Magie" zwischen der Zeichenfolge oder der array() -Syntax und dem Aufruf. call_user_func(array($obj, 'str')) ist syntaktisch identisch mit $obj->str() . Wenn str privat ist, wird der Aufruf fehlschlagen.

Sie sollten Ihren Event-Handler einfach öffentlich machen. Dies hat eine gültige semantische Bedeutung, d. H. "Beabsichtigt, von außerhalb meiner Klasse aufgerufen zu werden".

Diese Implementierung hat andere interessante Nebenwirkungen, zum Beispiel:

%Vor%     
zildjohn01 03.01.2011 22:18
quelle

Tags und Links