Wie verwende ich bind() und bindTo() der PHP-Closure-Klasse?

WBOY
Freigeben: 2016-10-17 09:30:13
Original
1562 Leute haben es durchsucht

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>
Nach dem Login kopieren
Nach dem Login kopieren

Vielen Dank

Antwortinhalt:

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>
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren

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.

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage