函数调用期间的PHP全局变量错误

时间:2018-10-25 10:42:27

标签: php variables global

我具有以下功能:

<?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可以读取该函数内部设置的全局变量,但是如果我调用该函数,则会收到“未定义的变量”错误。

2 个答案:

答案 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)匹配