这是我的小脚本,从编写中我了解到我不知道 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()
函数是不可见的,因此它内部未定义。