Unterschied des Variablenumfangs zwischen PHP und C: Blockumfang ist nicht genau gleich?

Lesezeit: 2 Minuten

Benutzer-Avatar
Powerboy

Der folgende PHP-Code wird ausgegeben 3.

function main() {
    if (1) {
        $i = 3;
    }
    echo $i;
}

main();

Aber der folgende C-Code wird einen Kompilierfehler auslösen.

void main() {
    if (1) {
        int i = 3;
    }

    printf("%d", i);
}

Variablen in PHP sind also nicht streng blockbezogen? In PHP können im inneren Block definierte Variablen im äußeren Block verwendet werden?

  • Dies ist eigentlich keine Frage, wenn Sie sie bereits selbst beantwortet haben.

    – Lotus Notes

    24. Mai 2010 um 0:21 Uhr

  • @Byron – Ich möchte das nur bestätigen. Es ist seltsam für mich, wer von C zu PHP gekommen ist.

    – Powerboy

    24. Mai 2010 um 0:25 Uhr

  • warum downvoten? Frage finde ich gut

    – Andrej

    24. Mai 2010 um 0:30 Uhr

  • Es wird ermutigt, Ihre eigenen Fragen zu beantworten. Sie können eine Frage mit einer Antwort stellen (Sie müssen jedoch eine Antwort posten) als eine Form des Wissensaustauschs als stackoverflow.com/help/self-answer

    – KaizenCoder

    7. August 2016 um 2:38 Uhr

PHP hat nur Funktionsumfang – Kontrollstrukturen wie z if keinen neuen Geltungsbereich einführen. Es macht jedoch auch nichts aus, wenn Sie Variablen verwenden, die Sie nicht deklariert haben. $i wird außerhalb von nicht existieren main() oder wenn die if-Anweisung fehlschlägt, aber Sie können sie trotzdem frei echoen.

Wenn Sie das error_reporting von PHP so eingestellt haben, dass es Benachrichtigungen enthält, wird es eine ausgeben E_NOTICE Error zur Laufzeit wenn Sie versuchen, eine nicht definierte Variable zu verwenden. Also wenn du hättest:

function main() {
 if (rand(0,1) == 0) {
  $i = 3;
 }
 echo $i;
}

Der Code würde gut laufen, aber einige Ausführungen geben ‘3’ zurück (wenn die if gelingt), und einige werden ein erhöhen E_NOTICE und Echo nichts, wie $i wird nicht im Geltungsbereich der Echo-Anweisung definiert.

Außerhalb der Funktion, $i wird nie definiert (weil die Funktion einen anderen Gültigkeitsbereich hat).

Für mehr Information: http://php.net/manual/en/language.variables.scope.php

  • Gute Erklärung! aber nur weil du etwas tun kannst, heißt das nicht, dass du es tun solltest. Es ist keine gute Praxis, eine Variable zu verwenden, die nicht definiert wurde.

    – Sheldon Juncker

    8. Januar 2015 um 16:15 Uhr

  • Oh, und Sie müssen nicht prüfen, ob das Ergebnis des Rand-Calls gleich Null ist. Man kann einfach einen Shebang vor den Rand stellen 🙂

    – Peter Chaula

    9. November 2017 um 21:50 Uhr

1245800cookie-checkUnterschied des Variablenumfangs zwischen PHP und C: Blockumfang ist nicht genau gleich?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy