Heim  >  Artikel  >  Backend-Entwicklung  >  Wie verwende ich bind() und bindTo() der PHP-Closure-Klasse?

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

WBOY
WBOYOriginal
2016-10-17 09:30:131555Durchsuche

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

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>

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.

Stellungnahme:
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
Vorheriger Artikel:Ausgabe der Rangliste Nächster Artikel:Ausgabe der Rangliste