(PHP 5 >= 5.4.0, PHP 7, PHP 8)
Closure::bindTo — Dupliziert eine Closure mit einem neuen gebundenen Objekt und Geltungsbereich einer Klasse
Erzeugt eine neue anonyme Funktion mit demselben Funktionskörper und denselben gebundenen Variablen wie diese und gibt sie zurück, aber möglicherweise mit einem anderen gebundenen Objekt und einem neuen Geltungsbereich der Klasse.
Das "gebundene Objekt" bestimmt den Wert, den $this
im Funktionskörper haben wird, und der "Klassenbereich" ist eine Klasse, die bestimmt, auf welche private und protected Mitglieder die anonyme Funktion zugreifen kann. Das heißt, die für die Funktion sichtbaren Mitglieder sind dieselben, als ob die anonyme Funktion eine Methode der im Parameter newScope
übergebenen Klasse wäre.
Eine statische Closure kann zwar kein Objekt binden (der Wert des Parameters newThis
muss null
sein), aber diese Funktion kann trotzdem verwendet werden, um den Geltungsbereich ihrer Klasse zu ändern.
Diese Funktion stellt sicher, dass eine nicht-statische Closure mit einer gebundenen Instanz einen Geltungsbereich hat und umgekehrt. Zu diesem Zweck wird eine nicht-statische Closure, der zwar ein Geltungsbereich, dafür aber nur eine eine null
-Instanz gegeben wird, statisch gemacht, und eine nicht-statische Closure ohne Geltungsbereich, die eine Nicht-null
-Instanz erhält, kommt in den Geltungsbereich einer nicht spezifizierte Klasse.
Hinweis:
Wenn nur anonyme Funktionen dupliziert werden sollen, kann stattdessen cloning verwendet werden.
newThis
Das Objekt, an das die angegebene anonyme Funktion gebunden werden soll, oder null
wenn die Closure nicht gebunden werden soll.
newScope
Der Bereich der Klasse, dem die Closure zugeordnet werden soll, oder 'static', um den aktuellen Bereich beizubehalten. Wenn ein Objekt angegeben wird, wird stattdessen der Typ des Objekts verwendet. Dieser bestimmt die Sichtbarkeit der protected und private Methoden des gebundenen Objekts. Es ist nicht erlaubt, eine interne Klasse (oder ein Objekt einer solchen) als Parameter zu übergeben.
Beispiel #1 Closure::bindTo()-Beispiel
<?php
class A
{
private $val;
public function __construct($val)
{
$this->val = $val;
}
public function getClosure()
{
// Gibt eine Closure zurück, die an dieses Objekt und diesen
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
1 2