Php 从函数、变量范围内调用函数

Php 从函数、变量范围内调用函数,php,scope,Php,Scope,我只想确认以下操作不起作用: function f1(){ $test = 'hello'; f2(); } function f2(){ global $test; echo $test; } f1(); //expected result 'hello' 难道没有办法像Javascript那样在作用域链上“流动”吗?从手册上看,我的选择似乎是全局的,或者根本没有 我只是想知道这是否正确。它不会起作用 您可以通过以下方式将变量作为参数传递: function f1(){

我只想确认以下操作不起作用:

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

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

f1(); //expected result 'hello'

难道没有办法像Javascript那样在作用域链上“流动”吗?从手册上看,我的选择似乎是全局的,或者根本没有


我只是想知道这是否正确。

它不会起作用

您可以通过以下方式将变量作为参数传递:

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

function f2($string){
  echo $string;
}
f1(); //expected result 'hello'

它不起作用

您可以通过以下方式将变量作为参数传递:

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

function f2($string){
  echo $string;
}
f1(); //expected result 'hello'

添加
global$test

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

添加
global$test

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

global
指令使本地函数成为顶级全局范围的一部分。它不会迭代备份函数调用堆栈以查找该名称的变量,它只会跳回到绝对顶层,因此如果您这样做:

$test = ''; // this is the $test that `global` would latch on to
function f1() { ... }
function f2() { ... }
<>基本上,考虑<代码>全局<代码>等价于:

$test =& $GLOBALS['test']; // make local $test a reference to the top-level $test var 

global
指令使本地函数成为顶级全局范围的一部分。它不会迭代备份函数调用堆栈以查找该名称的变量,它只会跳回到绝对顶层,因此如果您这样做:

$test = ''; // this is the $test that `global` would latch on to
function f1() { ... }
function f2() { ... }
<>基本上,考虑<代码>全局<代码>等价于:

$test =& $GLOBALS['test']; // make local $test a reference to the top-level $test var 

我知道我可以通过$test进入f2。这只是出于好奇。好吧,我只是添加了代码,因为我不确定,如果其他人也有同样的问题并看到这个页面,那就更好了。试试吧。。。这应该告诉你真的很快(比在这里问问题快得多)@ircmaxell谢谢。显然,如果我不知道示例代码的作用或不作用,那么编写示例代码是毫无意义的。问题更重要的是,“有没有办法做到这一点”而不进入全局范围。我知道我可以通过$test进入f2。这只是出于好奇。好吧,我只是添加了代码,因为我不确定,如果其他人也有同样的问题并看到这个页面,那就更好了。试试吧。。。这应该告诉你真的很快(比在这里问问题快得多)@ircmaxell谢谢。显然,如果我不知道示例代码的作用或不作用,那么编写示例代码是毫无意义的。问题更重要的是,“有没有办法做到这一点”而不涉及全球范围。是的,我只是做了一个评论,因为我想每个人都会这么说;)谢谢你的确认。是的,我只是做了一个评论,因为我想每个人都会这么说;)谢谢你的确认。