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 == 1
或2
不严格关于数据类型).如果为1它将回显"函数应该再次回显值:1",如果为2,它将回显相同但数字为2.
由于某种原因,内部的if语句foo()
都被传递(我知道这是因为如果我将第一个if语句更改为if ($var != 1)
,则传递为true,即使我声明了 $var = 1
.
这里发生了什么事?我以为我把这一切都搞定了,现在我觉得我只是倒退了:/
该功能不知道是什么$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)
顺便说一句,避免全局变量几乎总是更好.我鼓励你去后一条路线并将值传递给函数体.