PHP:函数内部没有拾取全局变量


PHP: Global var not being picked up inside a function

这让我大吃一惊。。。

我有一个独立的PHP文件,还有一个带有全局变量的简单函数

<?php
    $var = 4;
    function echoVar()
    {
        echo $var; 
    }
    echoVar();
?>

当我调用echoVar()时,没有返回任何内容。。。但是,如果我将$var放在函数中,它将返回4。

这是怎么回事?在这种情况下,$var不应该是全局的吗?

如果变量设置在函数外部,则在该函数内部不可见。若要访问它,必须使用global关键字将其声明为全局。这被称为作用域

<?php
$var = 4;
function echoVar() {
    global $var;
    echo $var;
}
echoVar();

注意:这通常被认为是不好的做法。阅读本文了解更多信息。

一个好的替代方案是将变量作为参数传入:

<?php
$var = 4;
function echoVar($var) {
    echo $var;
}
echoVar($var);

这里有很多选项。。。像

<?php
    $var = 4;
    function echoVar($var)
    {
        echo $var; 
    }
    echoVar($var);
?>

<?php
    $var = 4;
    function echoVar()
    {
        global $var;
        echo $var; 
    }
    echoVar();
?>

您可以将$var作为参数,如下所示:

$var=4;

function echoVar($var)
{
    echo $var; 
}
echoVar($var);

或者使用全局,比如:

$var = 4;
function echoVar()
{
    global $var;
    echo $var; 
}
echoVar();

当您调用任何函数时,它都是创建局部变量,因此您必须在调用函数部分传递参数。

    $var = 4;
    function echoVar($var)
    {
        echo $var; 
    }
    echoVar($var);

只是澄清一下,因为每个人似乎都在发布垃圾。

  • 不使用global $var;
  • 不要在函数内部回声
  • 函数的输出在被回显之前不需要分配给变量

这就是它"应该"做的。

<?php
    $var = 4;  //set initial input var this is external to the function
    function echoVar($internalvar) {  /*notice were accepting $var as $internalvar I'm doing this to clarify the different variables so you don't end up getting confused with scope  $internalvar is local to the function only and not accessible externally*/
        return $internalvar; //now we pass the function internal var back out to the main code we do this with return you should never echo out your output inside the function
    }
    echo echoVar($var);  //call function and pass $var in as an arguement
?>