Вызов функции изнутри функции, область видимости переменной - PullRequest
0 голосов
/ 04 мая 2011

Я просто хочу подтвердить, что следующее НЕ будет работать:

function f1(){
  $test = 'hello';
  f2();
}

function f2(){
  global $test;
  echo $test;
}

f1(); //expected result 'hello'

http://php.net/manual/en/language.variables.scope.php

Нет ли способа просто «пролить поток» вверх по цепочке областей, как вы можете сделатьв JavaScript?Из руководства кажется, что мой вариант - глобальный или вообще ничего.

Я просто хотел узнать, правильно ли это.

Ответы [ 3 ]

4 голосов
/ 04 мая 2011

Это не будет работать.

Вы можете передать переменную как параметр, хотя:

function f1(){
  $test = 'hello';
  f2($test);
}

function f2($string){
  echo $string;
}
f1(); //expected result 'hello'
0 голосов
/ 04 мая 2011

Директива global делает локальную функцию частью глобальной области видимости верхнего уровня. Он не будет выполнять итерацию обратно в стек вызовов функций, чтобы найти переменную с таким именем, он просто перейдет обратно к абсолютному верхнему уровню, так что если вы сделали:

$test = ''; // this is the $test that `global` would latch on to
function f1() { ... }
function f2() { ... }

В принципе, global считается эквивалентом:

$test =& $GLOBALS['test']; // make local $test a reference to the top-level $test var 
0 голосов
/ 04 мая 2011

Добавить global $test; в f1

function f1(){
    global $test;
    $test = 'hello';
    f2();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...