PHP比较运算符和表单if语句(!foo())

iDo*_*ter 2 php if-statement boolean variable-assignment comparison-operators

这是我的小脚本,通过编写,我了解到我不知道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;
    }
}     
?>
Run Code Online (Sandbox Code Playgroud)

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

  • 该声明if (!foo)将运行foo().如果函数返回false,它最后也会回显"Goodbye".

  • 该函数foo()将检查是否($var == 12不严格关于数据类型).如果为1它将回显"函数应该再次回显值:1",如果为2,它将回显相同但数字为2.

由于某种原因,内部的if语句foo()都被传递(我知道这是因为如果我将第一个if语句更改为if ($var != 1),则传递为true,即使我声明了 $var = 1.

这里发生了什么事?我以为我把这一切都搞定了,现在我觉得我只是倒退了:/

Sam*_*son 5

该功能不知道是什么$var.您必须将其传递,或使其成为全局:

function foo() {
  global $var;
  /* ... */
}
Run Code Online (Sandbox Code Playgroud)

要么

$var = 1;
if ( !foo( $var ) ) echo "Goodbye";

function foo ( $variable ) {
  /* Evaluate $variable */
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,避免全局变量几乎总是更好.我鼓励你去后一条路线并将值传递给函数体.