Php While循环与布尔条件内的函数
我在网上看到过很多代码,其中有一个函数在while循环的布尔条件中为变量赋值:Php While循环与布尔条件内的函数,php,function,while-loop,Php,Function,While Loop,我在网上看到过很多代码,其中有一个函数在while循环的布尔条件中为变量赋值: while ($var = testfunction($param1, $param2)) { echo "hello world!<br>"; } while($var=testfunction($param1,$param2)) { 回音“你好,世界!”; } 问题: 布尔条件($var=testfunction($param1,$param2))中发生的事件序列是什么?而判断的值是什么,而判
while ($var = testfunction($param1, $param2))
{
echo "hello world!<br>";
}
while($var=testfunction($param1,$param2))
{
回音“你好,世界!”;
}
问题:
布尔条件($var=testfunction($param1,$param2))
中发生的事件序列是什么?而判断的值是什么,而判断的值是否为真
我自己的测试:
我自己做了测试。当函数完全为空且未返回任何内容时,while循环中的代码不会执行,但是当函数testfunction()
返回TRUE
时,while循环中的代码将继续执行。这导致我推断while
条件检查$var
中的结果值是什么。因此,如果函数将布尔值返回到$var
中,则这将是while
判断的条件。这也让我相信,如果$var
最终是一个数字,那么任何==0
都将等于false,任何都将等于false=0将等于true
这些是我的推论,尽管我没有找到任何相关文档,我的分析可能是错误的。事实上,while
是基于$var
存在/获得“真实”值的条件
你应该写下:
$var = testfunction($param1, $param2);
while ($var){
echo "whateveryouwant";
$var = testfunction($param1, $param2);
}
它在执行时会是完全相同的行为,它让您更清楚,因为首先,while($var=testfunction($param1,$param2))
条件基于$var=testfunction($param1,$param2)
的值,它是$var
的值,它等于testfunction($param1,$param2)
您还可以编写while(testfunction($param1,$param2))
如果在该条件以外的其他地方不使用返回值,则行为将是相同且更清晰的。在被调用函数运行且其返回值被分配给$var
之后,while条件对$var
的值执行类型强制,使之成为布尔值。因此,如果函数返回如果值的计算结果为FALSE,则while循环存在,否则它将为此迭代运行其代码块
精确显示哪些值计算为false,请参见以下列表:
转换为布尔值时,以下值被视为FALSE:
布尔值本身是假的
整数0(零)
浮动0.0(零)
空字符串和字符串“0”
零元素数组
具有零成员变量的对象(仅限PHP 4)
特殊类型NULL(包括未设置的变量)
从空标记创建的SimpleXML对象
其他所有值均视为真(包括任何资源)
正在执行整个表达式,并将其值转换为
首先,将调用testfunction(…)
,然后进行赋值。根据:
赋值表达式的值是指定的值
因此,返回并分配给$var
的内容将转换为布尔值,并由WHILE
循环计算。如果分配的值为null,[],0等,则不会执行while循环中的代码块。否则它将被执行。while语句的含义很简单。它告诉PHP执行嵌套语句重复,只要while表达式的计算结果为TRUE,我很欣赏这个写得很好的问题!也就是说,最简单的解释就像文档()所说的:“它告诉PHP重复执行嵌套语句,只要while表达式的计算结果为TRUE。”@Dagon@JoelHinz当你说表达式时,你到底指的是什么?表达式字面上就是变量$var
?因为如果表达式是一个语句,那么我会假设它应该总是计算为TRUE
(我执行的测试不是这样的)因为无论返回值是多少,它总是成功执行。不,while
循环正在计算$var
,其值设置为函数testfunction(…)
的返回值。因此,只要函数返回true或任何truthy(如数字、字符串、数组、对象),while循环继续运行。换句话说,while
循环对$var
:执行布尔检查,以查看在布尔模式下计算为true/false的内容。要在@Terry上展开,基本上它表示运行循环,直到$param1或$param2中的某些内容发生更改,使函数返回false而不是true。一个简短的脚本为了演示这个答案所解释的内容:$foo=array(3,2,1,0,1,2,3);$i=0;而($bar=$foo[$i]){echo$bar.\n;$i++;}
。运行它,表达式的求值方式应该变得显而易见。
($var = testfunction($param1, $param2))