2

这是我的小脚本,通过编写它我了解到我不知道 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 == 12(对数据类型不严格)。如果为 1,它将回显“函数应再次回显值:1”,如果为 2,它将回显相同但数字为 2。

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

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

4

2 回答 2

5

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

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

或者

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

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

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

于 2012-05-23T23:35:13.447 回答
0

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

于 2012-05-23T23:38:17.627 回答