我只想确认以下内容不起作用:
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中一样“流动”范围链?从手册中可以看出,我对此的选择是全局的,或者根本没有。
我只是想知道这是否正确。
答案 0 :(得分:4)
不会工作。
您可以将变量作为参数传递:
function f1(){
$test = 'hello';
f2($test);
}
function f2($string){
echo $string;
}
f1(); //expected result 'hello'
答案 1 :(得分:0)
在f1
中添加global $test;
function f1(){
global $test;
$test = 'hello';
f2();
}
答案 2 :(得分:0)
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