【问题标题】:PHP global variable error during function's calling函数调用期间的PHP全局变量错误
【发布时间】:2019-03-29 22:51:43
【问题描述】:

我有以下功能:

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

【问题讨论】:

  • 你必须在调用函数之前声明全局变量。
  • 错误源于函数calldeffunc($var1, $var2);的范围内没有$var1你正试图从外面打开前门屋子里的钥匙……
  • 嘿,只是跟进看看我的回答是否有帮助? :)

标签: php variables global


【解决方案1】:

问题是$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 数组中获取变量,其中 varname ($var1) 与 $_GLOBALS 键名 (var1) 匹配

【讨论】:

    【解决方案2】:

    您有范围问题。 $var1 仅在函数内部可用。在函数外声明$var2,然后你可以将它作为参数发送给函数。

    【讨论】:

    • 你可以在评论中写这个,是吗?
    • @RahulMeshram - OP 正在寻找答案。答案是,他的范围有问题。
    • 我认为函数的“内部”是指在大括号内,而函数的“外部”是指不在大括号内的任何地方。如果这是真的,我不明白“在函数外声明 $var2”是什么意思,因为它是在括号外声明的。如果 $var1 确实只在函数内部可用,那么为什么放在函数外部的最后一个 echo $var1 仍然可以打印其值而不是“未定义变量”错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多