Php 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循环的布尔条件中为变量赋值:

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))