我具有以下功能:
<?php
function deffunc($param1, $param2)
{
global $var1;
$var1 = "firstvar";
echo $param1;
echo "\n";
echo $param2;
}
$var2 = "secondvar";
deffunc($var1, $var2);
?>
调用该函数将为$ var1返回一个“未定义的变量”,但我不明白为什么,因为它是全局的并且在函数的大括号内定义。 但是,如果我在函数调用后使用echo,如下所示:
deffunc($var1, $var2);
echo $var1;
它将返回结果“ firstvar”。 我不明白为什么echo可以读取该函数内部设置的全局变量,但是如果我调用该函数,则会收到“未定义的变量”错误。
答案 0 :(得分:0)
您遇到范围问题。 try{
window.close();
}
catch (e){
console.log("text");
}
仅在函数内部可用。在函数外声明$var1
,然后可以将其用作发送给函数的参数。
答案 1 :(得分:0)
问题在于$var1
没有在函数之前声明。
如果我们查看以下PHP页面:https://secure.php.net/manual/en/language.variables.scope.php,我们可以看到他们的示例函数预先声明了$a
和$b
。您的代码应这样写:
$var1 = 'some string';
function foo()
{
global $var1;
return $var1;
}
# this will output some string
echo '<pre>. print_r(foo()) .'</pre>'. "\n";
之所以起作用,是因为函数本身具有局部作用域。如果我们事先声明了一个var,那么在不使用关键字global
的情况下它仍然不在函数中。使用它从$_GLOBALS
数组中获取变量,变量名($var1
)与$ _GLOBALS关键字名(var1
)匹配