das scheint nicht zu funktionieren und ich weiß nicht warum? Sie können statische Schließungen in nicht statischen Methoden erstellen, warum nicht umgekehrt?Wie binde ich eine in einer statischen Funktion erstellte Schließung an eine Instanz
7
A
Antwort
6
Wie ich auf meinem Kommentar sagte, scheint es, dass Sie das "$ this" nicht von einer Schließung ändern können, die aus einem statischen Kontext kommt. "Static closures cannot have any bound object (the value of the parameter newthis should be NULL), but this function can nevertheless be used to change their class scope." Ich denke, man wird so etwas machen:
class RegularClass {
private $name = 'REGULAR';
}
class Holder{
public function getFunc(){
$func = function()
{
// this is a static function unfortunately
// try to access properties of bound instance
echo $this->name;
};
return $func;
}
}
class StaticFunctions {
public static function doStuff()
{
$rc = new RegularClass();
$h=new Holder();
$bfunc = Closure::bind($h->getFunc(), $rc, 'RegularClass');
$bfunc();
}
}
StaticFunctions::doStuff();
Verwandte Themen
- 1. Wie binde ich an eine Farbe in einer WPF ColorAnimation?
- 2. Wie binde ich an eine benutzerdefinierte Schaltflächenklasse?
- 3. Wie binde ich eine ArrayList an ein PreparedStatement in Oracle?
- 4. In bash, wie binde ich eine Funktionstaste an einen Befehl?
- 5. Wie binde ich einen Socket dynamisch an nur eine Netzwerkschnittstelle?
- 6. Wie binde ich die aktivierte Bindung einer Schaltfläche an, ob eine NSArrayController über eine Auswahl verfügt?
- 7. Wie lagere ich eine Schließung in Rust?
- 8. Wie bekomme ich eine Instanz einer bestimmten Klasse in PHP?
- 9. Wie binde ich an die SelectedItem-Eigenschaft in einer ControlTemplate?
- 10. Wie binde ich eine Jquery-Submit an eine form_tag-Formular-Submission-Aktion in Rails
- 11. Wie binde ich eine Combobox an das in einer anderen Combobox ausgewählte Objekt?
- 12. Wie binde ich an einen Combobox-Anzeigewert?
- 13. Wie verwandle ich eine Animal-Instanz in eine Dog-Instanz?
- 14. Wie erstelle ich eine Instanz einer Klasse?
- 15. in JavaScript an eine andere Funktion eine Funktion binden
- 16. Wie binde ich eine ASP.NET Repeater Control an eine IList <String>?
- 17. In WPF wie binde ich eine ObservableCollection von RectangleGeometry ist?
- 18. Wie eine Funktion mit Schließung in Swift erben
- 19. Wie übergebe ich eine Funktion mit nicht statischen Argumenten als Variable in JavaScript an eine andere Funktion?
- 20. Wie übergebe ich einen optionalen Closing-Parameter an eine Funktion?
- 21. Wie binde ich an RelativeSource Self?
- 22. Wie binde ich an s-up?
- 23. PHP Eine Instanz einer Klasse an eine andere Klasse übergeben
- 24. Wie übergebe ich eine Funktion an Enum.each?
- 25. Wie binde ich eine Memberfunktion Vorlage vorbei unspecified Anruf Wrapper
- 26. Wie übergebe ich $ (this) an eine Funktion?
- 27. Wie binde ich eine Liste von Objekten mit Composite-Key an eine Checkbox-Liste?
- 28. Bindung eine Instanz Methode vs Verpackung in einer anonymen Funktion
- 29. Swift Verwendung Selektor-Argument wie eine Schließung
- 30. Rückgabewert für eine Schließung Swift
Hmm, scheint nicht mit [ 'bindTo'] zu arbeiten (http://www.php.net/manual/en/closure .bindto.php) entweder. – Charles
Aus der BindTo-Dokumentation "Statische Closures können kein gebundenes Objekt haben (der Wert des Parameters newthis sollte NULL sein), aber diese Funktion kann trotzdem verwendet werden, um ihren Klassenbereich zu ändern." http://www.php.net/manual/en/closure.bindto.php, und da bind ist nur die statische von bindTo ich denke, Sie können nicht eine statische Schließung in einem statischen Kontext. – FabioCosta
Dies ist in PHP 7 behoben. Siehe Bugs [# 64761] (https://bugs.php.net/bug.php?id=64761) und [# 68792] (https://bugs.php.net/bug .php? id = 68792). – bishop