Anonyme Funktion/Closure und mit self:: oder static::
Arbeite ich mit anonymen Funktionen, wo ich bin erstellen anonyme Funktion außerhalb des Objekts, und klicken Sie dann hinzufügen, um ein Objekt später in der es verwendet wird, mit __callStatic magic-Funktion. Die Verschlüsse, die Hinzugefügt werden enthalten Methoden von der übergeordneten Klasse. Ich Frage mich, ob ich wäre in der Lage, um diese Methoden von der Schließung?
Jetzt bekomme ich diesen Fehler:
EmptyObject::addMethod('open', function(){
if (static::_hasAdapter(get_class(), __FUNCTION__))
return self::_callAdapter(get_class(), __FUNCTION__, $details);
echo '<p>You have mail!</p>';
});
wirft diesen Fehler:
Fatal error: Cannot access statisch:: wenn keine Klasse scope ist aktiv in
Und
//Add the functions
EmptyObject::addMethod('open', function(){
if (EmptyObject::_hasAdapter('EmptyObject', __FUNCTION__))
return EmptyObject::_callAdapter('EmptyObject', __FUNCTION__, $details);
echo '<p>You have mail!</p>';
});
diesen Fehler auslösen, weil die Methode ist geschützt
Fatal error: Uncaught exception 'BadMethodCallException' with message 'Methode '_hasAdapter' wurde nicht gefunden in Klasse EmptyObject'
- Alte php.. In 5.5.9 ich kann sehen, 'static::" in anonimous-Funktion
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie erreichen dies, indem Sie Closure::bind() (PHP >= 5.4.0)
Nun jeder anonyme Funktion übergeben EmptyObject::addMethod() ausgeführt wird, der im Rahmen der EmptyObject Klasse
__CLASS__
argument(oder legen Sie es auf'static'
z.B. der Standard) im Falle der späte statische Bindung.Einfach speichern den Namen der Klasse und übergeben es an die Schließung über
use
. Sie können rufen Sie eine öffentliche statische Methode oder nehmen Sie öffentliche statische Eigenschaften oder Konstanten auf diese Weise. Wenn die closure übergeben wird, aus einem anderen Kontext und es wird immer noch funktionieren, solange der richtige Wert für$class
übergeben wurde, wenn es erstellt wurde. Werke für php 5.3:Verschlüsse genannt werden mag, dass für einen Grund. Sie 'schließen' den Spielraum, den Sie sind, definiert. Sind Sie nicht einfach nur code-Blöcke, die können wählen Sie den Bereich von der Stelle, Sie sind eingefügt.