Bitte stellen Sie kurz den Variablenbereich von PHP vor. . .

WBOY
Freigeben: 2016-08-20 09:04:01
Original
917 Leute haben es durchsucht

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

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.

Antwortinhalt:

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

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

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

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

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

<code class="php">function A()
{
    $num = 0;
    call_user_func(function () use ($num) {
        //这么用$num
    });
}</code>
Nach dem Login kopieren

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

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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!