2016-06-04 2 views
-1

Nur PHP begann das Lernen, und während sie mit variablen Bereiche experimentieren, habe ich diesen Code:PHP Variable Scope Verständnis

<?php 
    $x = 5; 

    function scopeTest($x) { 
     global $x; 
     echo $x;    
    } 

    scopeTest(4); 
?> 

In der gegebenen Funktion übergeben ich Wert 4, in der Funktion, die den Wert in gespeichert Variable $x (lokal für die Funktion). Die Ausgabe dieses Codes ist 5 und nicht 4.

Ich weiß nicht, wo die Variable mit Wert 4 gegangen ist? Ich weiß, dass ich dies tun kann, indem ich den lokalen Variablennamen in der Funktion ändere, aber ich möchte den Ablauf dieses Programms wissen, wie es 5 ausgibt.

Wird die lokale Variable $x mit der globalen Variablen $x überschrieben?

Gibt es eine Möglichkeit, innerhalb der Funktion auf die lokale Variable $x Wert 4 zuzugreifen?

+0

Einer der Gründe, warum mit 'global' ist keine gute Idee .... das ist nicht intuitiv Verhalten –

+0

Eine Möglichkeit, der Lage sein, sowohl für den Zugriff ist das 'X' $ Argument zuzuweisen eine andere Variable als der globale 'function scopeTest ($ y) { global $ x; echo $ x; echo $ y; } ' –

+0

@MarkBaker danke, ich habe dieses Ding bereits in meiner Frage geschrieben. Ich weiß, dass ich das tun kann, wollte aber nur wissen, was wirklich hinter den Kulissen passiert. –

Antwort

1

Die lokale Variable wird mit der Anweisung global überschrieben, und da sie denselben Variablennamen verwenden, haben Sie den Verweis verloren.

Aber auf diese Weise können Sie beide verwenden:

$x = 5; 

function scopeTest($x) { 
    echo $GLOBALS['x'], $x; // 54  
} 

scopeTest(4); 

Oder .. nur die lokale Variable umbenennen

function scopeTest($y) { 
    global $x; 
    echo $x, $y;   
} 
+0

yeah habe gerade den gleichen Code auf meinem localhost versucht .. –

1

Ja Sie den Wert 4 des $ x verwenden können, die durch Echo $ x vor dem globalen $ x;

global $x; //replace the value of $x to it's global value.