在PHP中使用超全局函数作为默认函数参数

在PHP中使用超全局函数作为默认函数参数,php,global-variables,default,user-defined-functions,default-parameters,Php,Global Variables,Default,User Defined Functions,Default Parameters,我可以设想多种方法来实现以下功能:;然而,我希望有一个超级优雅的解决方案。我可以使用PHP超全局变量作为用户定义函数参数的默认值吗 例如: function test1($foo=$_SERVER['PATH']) { echo $foo; } 上面的代码显示了一个错误。正如我所说,我知道我可以使用以下代码实现同样的目标(但上面的代码更具吸引力): 谢谢你的帮助 我建议传入变量,但如果要使用全局变量,可以这样做 function test2() { global $foo;

我可以设想多种方法来实现以下功能:;然而,我希望有一个超级优雅的解决方案。我可以使用PHP超全局变量作为用户定义函数参数的默认值吗

例如:

function test1($foo=$_SERVER['PATH']) {
   echo $foo;
}
上面的代码显示了一个错误。正如我所说,我知道我可以使用以下代码实现同样的目标(但上面的代码更具吸引力):


谢谢你的帮助

我建议传入变量,但如果要使用全局变量,可以这样做

function test2() {
    global $foo;
    ...
}
在函数的顶部,并在其他地方设置值,或者使用第二种方法-但需要在函数参数中指定默认值以使其成为可选值

function test2($foo='') {
   if (empty($foo)) $foo = $_SERVER['PATH'];
   echo $foo;
}
处理函数外部变量的另一种方法是通过引用传入变量。这将传入对原始变量的引用,而不是副本,因此在函数内部所做的任何更改都将影响函数范围之外的原始变量值

$foo = 'bar';
function test2(&$foo) {
   echo $foo;  // this will output "bar"
}

我认为第一种解决方案不起作用,因为在脚本计算时(类似于解释语言的编译),还没有定义
$\u SERVER['PATH']
值;PHP引擎抛出的错误是“Parse error:syntax error,第2行的M:\test.PHP中意外的T_变量”。您认为该错误与您的解释一致吗?我认为是的。变量(一个运行时元素)在静态上下文(一个“编译”时间元素)中可能没有意义。谢谢Lior,这是对这个问题的合理回答,我很感激。
$foo = 'bar';
function test2(&$foo) {
   echo $foo;  // this will output "bar"
}