【问题标题】:PHP comparison operators and statements of the form if (!foo())PHP 比较运算符和 if (!foo()) 形式的语句
【发布时间】:2012-05-30 13:17:54
【问题描述】:

这是我的小脚本,通过编写它我了解到我不知道 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。

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

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

【问题讨论】:

标签: php if-statement boolean variable-assignment comparison-operators


【解决方案1】:

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

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

或者

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

function foo ( $variable ) {
  /* Evaluate $variable */
}

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

【讨论】:

  • 天哪。我读过关于变量作用域的文章,但我仍然完全忘记了它。
【解决方案2】:

我强烈建议您阅读Variable scope 手册页。 $varfoo() 函数是不可见的,所以它内部是未定义的。

【讨论】:

    猜你喜欢
    • 2022-01-09
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 2015-12-25
    • 2018-11-10
    • 2014-09-08
    相关资源
    最近更新 更多