2016-06-04 6 views
-1

Только начал изучать PHP, и экспериментируя с переменными областями я создал этот код:PHP переменная Scope понимание

<?php 
    $x = 5; 

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

    scopeTest(4); 
?> 

В данной функции я прохожу значение 4, в функции, значение сохраняется в переменная $x (локальная функция). Выход этого кода: 5, а не 4.

Я не знаю, где переменная со значением 4 ушла? Я знаю, что могу это сделать, изменив имя локальной переменной в функции, но я хочу знать поток этой программы, как она выводит 5.

Является ли локальная переменная $x переопределенной глобальной переменной $x?

Есть ли способ получить доступ к локальной переменной $x значение 4 внутри функции?

+0

Одна из причин, почему использование 'global' это не очень хорошая идея .... это не интуитивно поведение на –

+0

Один из способов, чтобы иметь возможность доступа и является назначение' $ x' аргумент другая переменная, чем глобальная функция functionTest ($ y) { global $ x; echo $ x; echo $ y; } ' –

+0

@MarkBaker спасибо, я уже написал эту вещь в своем вопросе. Я знаю, что могу это сделать, но просто хотел узнать, что происходит за кулисами. –

ответ

1

Локальная переменная перезаписывается оператором global, и поскольку они используют одно и то же имя переменной, вы потеряли ссылку на нее.

Но, делая это, вы можете использовать как:

$x = 5; 

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

scopeTest(4); 

Или .. просто переименовать локальную переменную

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

Да, просто попробовал тот же код на моем localhost .. –

1

Да Вы можете использовать значение 4 в $ х на вторя $ x перед глобальным $ x;

global $x; //replace the value of $x to it's global value. 
Смежные вопросы