Ich muss in letzter Zeit etwas PHP schreiben, ich habe es noch nie zuvor geschrieben, ich kenne nur js. Es scheint, dass Variablen in PHP nicht von Bereichsketten wie JS referenziert werden. Wenn der folgende Code so aussieht, wie implementiert man ihn?
<code>function A(){ $num = 0; function B(){ //这里如何引用到变量$num??? } }</code>
Ich habe nachgesehen und festgestellt, dass die globale $num in B auf die globale Variable $num verweisen kann, aber es scheint, dass $num nicht global ist. . . Bitte geben Sie mir einen Rat.
Ich muss in letzter Zeit etwas PHP schreiben, ich habe es noch nie zuvor geschrieben, ich kenne nur js. Es scheint, dass Variablen in PHP nicht von Bereichsketten wie JS referenziert werden. Wenn der folgende Code so aussieht, wie implementiert man ihn?
<code>function A(){ $num = 0; function B(){ //这里如何引用到变量$num??? } }</code>
Ich habe nachgesehen und festgestellt, dass die globale $num in B auf die globale Variable $num verweisen kann, aber es scheint, dass $num nicht global ist. . . Bitte geben Sie mir einen Rat.
Übertragung:
JavaScript kann externe Variablen direkt in anonymen Funktionen verwenden.
Standardmäßig können anonyme PHP-Funktionen die Kontextvariablen des Codeblocks, in dem sie sich befinden, nicht direkt aufrufen. Sie müssen das Schlüsselwort use verwenden, um Abschlüsse (anonyme Funktionen) und externe Variablen zu verbinden.
<code>function getMoney() { $rmb = 1; $dollar = 6; $func = function() use ( $rmb ) { echo $rmb; echo $dollar; }; $func(); } getMoney(); //输出: //1 //报错,找不到dorllar变量 </code>
Wie Sie sehen können, ist Dollar nicht im Schlüsselwort use deklariert und kann in dieser anonymen Funktion nicht abgerufen werden. Achten Sie daher während der Entwicklung auf dieses Problem.
Manche Leute fragen sich vielleicht, ob es möglich ist, die Kontextvariablen in einer anonymen Funktion zu ändern, aber ich habe festgestellt, dass dies nicht möglich ist:
<code>function getMoney() { $rmb = 1; $func = function() use ( $rmb ) { echo $rmb; //把$rmb的值加1 $rmb++; }; $func(); echo $rmb; } getMoney(); //输出: //1 //1 </code>
Es stellt sich heraus, dass sich die Verwendung nur auf eine Kopie der Variablen bezieht.
Wenn Sie die Variable vollständig referenzieren möchten, anstatt sie zu kopieren, müssen Sie vor der Variablen ein &-Symbol hinzufügen:
<code>function getMoney() { $rmb = 1; $func = function() use ( &$rmb ) { echo $rmb; //把$rmb的值加1 $rmb++; }; $func(); echo $rmb; } getMoney(); //输出: //1 //2 </code>
Wenn die anonyme Funktion an die Außenwelt zurückgegeben wird, speichert die anonyme Funktion die durch die Verwendung referenzierten Variablen, die Außenwelt kann diese Variablen jedoch nicht abrufen. Auf diese Weise kann das Konzept der „Schließung“ gelten klarer:
<code>function getMoneyFunc() { $rmb = 1; $func = function() use ( &$rmb ) { echo $rmb; //把$rmb的值加1 $rmb++; }; return $func; } $getMoney = getMoneyFunc(); $getMoney(); $getMoney(); $getMoney(); //输出: //1 //2 //3 </code>
<code class="php">function A() { $num = 0; call_user_func(function () use ($num) { //这么用$num }); }</code>
Die obige Antwort dient nur zur Beantwortung Ihrer Frage. Lesen Sie am besten zuerst das Handbuch und machen Sie sich mit der grundlegenden Syntax von PHP vertraut. Wenn Sie auf eine Frage stoßen, stellen Sie diese einfach einmal auf der Q&A-Website zu ineffizient. Verwenden Sie niemals js. Art, PHP zu schreiben