Informationen zur Verwendung von „bind“ und „bindTo“ von Closure finden Sie im PHP-Handbuch. Ich verstehe es wirklich nicht und verstehe das Konzept nicht.
Beim Beispiel „Closure::bind“ heißt es im Handbuch „Kopieren Sie einen Abschluss und binden Sie das angegebene $this-Objekt und den angegebenen Klassenbereich“. Wie ist das zu verstehen?
Wie hängen Schließungen und $this zusammen? Wofür wird der Klassenbereich verwendet?
Außerdem ist eine davon eine statische Version und die andere eine dynamische Version. Worauf bezieht sich das?
Können Sie diese Konzepte anhand der angegebenen Beispiele erklären?
<code><?php class A { private static $sfoo = 1; private $ifoo = 2; } $cl1 = static function() { return A::$sfoo; }; $cl2 = function() { return $this->ifoo; }; $bcl1 = Closure::bind($cl1, null, 'A'); $bcl2 = Closure::bind($cl2, new A(), 'A'); echo $bcl1(), "\n"; echo $bcl2(), "\n"; ?></code>
Vielen Dank
Informationen zur Verwendung von „bind“ und „bindTo“ von Closure finden Sie im PHP-Handbuch. Ich verstehe es wirklich nicht und verstehe das Konzept nicht.
Beim Beispiel „Closure::bind“ heißt es im Handbuch „Kopieren Sie einen Abschluss und binden Sie das angegebene $this-Objekt und den angegebenen Klassenbereich“. Wie ist das zu verstehen?
Wie hängen Schließungen und $this zusammen? Wofür wird der Klassenbereich verwendet?
Außerdem ist eine davon eine statische Version und die andere eine dynamische Version. Worauf bezieht sich das?
Können Sie diese Konzepte anhand der angegebenen Beispiele erklären?
<code><?php class A { private static $sfoo = 1; private $ifoo = 2; } $cl1 = static function() { return A::$sfoo; }; $cl2 = function() { return $this->ifoo; }; $bcl1 = Closure::bind($cl1, null, 'A'); $bcl2 = Closure::bind($cl2, new A(), 'A'); echo $bcl1(), "\n"; echo $bcl2(), "\n"; ?></code>
Vielen Dank
Ich weiß nicht, ob Sie jemals js
oder call
in apply
verwendet haben, es ist ein bisschen ähnlich.
Tatsächlich wird der Abschluss als Mitgliedsmethode oder statische Mitgliedsmethode des Objekts betrachtet.
<code class="php">Closure::bind($cl1, null, 'A'); //就相当于在类里面加了个静态成员方法 Closure::bind($cl2, new A(), 'A'); //相当于在类里面加了个成员方法</code>
Verwenden Sie $this
in Mitgliedsmethoden, um auf Objekte zuzugreifen, und statische Mitgliedsmethoden verwenden direkt 类名::成员
-Methoden.
Da es sich jedoch um eine anonyme Funktion handelt und keinen Funktionsnamen hat, gibt sie ein gebundenes $this-Objekt zurück Klassenbereich. Der Abschluss steht Ihnen zur Verfügung.