PHP 比较运算符和形式的语句 if (!foo())


PHP comparison operators and statements of the form if (!foo())

这是我的小脚本,从编写中我了解到我不知道 PHP 如何处理变量......

<?php 
$var = 1;
echo "Variable is set to $var <br />";
if (!foo()) echo "Goodbye";
function foo()
{
    echo "Function should echo value again: ";
    if ($var == 1)
    {
        echo "'$var = 1 <br />";
        return true;
    }
    if ($var == 2)
    {
        echo "'$var = 0 <br />";
        return false;
    }
}     
?>

所以,以下是我认为这个脚本的解释方式:

  • 语句if (!foo)将运行foo()。如果函数返回false,它也会在末尾回显"再见"。

  • 该函数foo()将检查是$var == 1还是2(对数据类型不严格)。如果为 1,它将回显"函数应再次回显值:1",如果为 2,它将回显相同但带有数字 2。

出于某种原因,foo() 中的 if 语句都被传递了(我知道这一点,因为如果我将第一个 if 语句更改为 if ($var != 1)即使我声明$var = 1 ,它也会传递为 true。

这是怎么回事?我以为我已经把这一切都搞定了,现在我觉得我只是倒退了:/

该函数不知道$var是什么。您必须将其传入,或将其全局化:

function foo() {
  global $var;
  /* ... */
}

$var = 1;
if ( !foo( $var ) ) echo "Goodbye";
function foo ( $variable ) {
  /* Evaluate $variable */
}

顺便说一下,避免全局变量几乎总是更好的。我鼓励你走后一条路,把值传递给函数体。

我强烈建议您阅读可变范围手册页。 $var对于foo()函数是不可见的,因此它内部未定义。