0

我可以通过多种方式来实现以下功能;但我希望有一个超级优雅的解决方案。我可以使用PHP超全局变量作为用户定义函数参数的默认值吗?在PHP中使用Superglobal作为默认函数参数

实施例:

function test1($foo=$_SERVER['PATH']) { 
    echo $foo; 
} 

上面的代码吐出一个错误。就像我说的,我知道我可以用下面的代码实现同样的事情(但上面的代码是更具吸引力):

function test2($foo) { 
    if (!isset($foo)) $foo = $_SERVER['PATH']; 
    echo $foo; 
} 

感谢您的帮助!

+0

我相信第一个解决方案不会工作,因为在脚本评估时(类似于解释语言的编译),$ _SERVER ['PATH']'值尚未定义。 –

+0

这听起来似乎合理; PHP引擎吐出的错误是“解析错误:语法错误,第2行M:\ test.php中出现意外的T_VARIABLE”您认为该错误与您的解释是否一致? – lukeavsec

+0

我会说它的确如此。一个变量(一个运行时元素)在静态上下文(一个“编译”时间元素)中可能没有意义。 –

回答

0

我会建议传递变量,但如果你想使用一个全球性的,你可以在你的函数顶部做

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" 
} 
相关问题