【发布时间】:2016-09-19 16:30:17
【问题描述】:
我在网上看到了很多代码,其中有一个函数在while循环的布尔条件内为变量赋值:
while ($var = testfunction($param1, $param2))
{
echo "hello world!<br>";
}
问题:
在布尔条件($var = testfunction($param1, $param2)) 中发生的事件顺序是什么? while 判断的值是真的还是假的?
我自己的测试:
我已经完成了自己的测试。当函数完全为空,并且没有返回任何内容时,while 循环内的代码不会执行,但是当函数testfunction() 返回TRUE 时,while 循环内的代码会继续执行。这使我推断while 条件正在检查$var 中的结果值是什么。因此,如果函数将布尔值返回到$var,那么这将是while 判断的条件。这也让我相信,如果$var 最终成为一个数字,那么任何==0 都将等同于假,而任何!=0 都将等同于真。
这些是我的推论,虽然我没有找到它们背后的任何文件,我的分析可能是错误的。
【问题讨论】:
-
while语句的意思很简单。它告诉 PHP 重复执行嵌套语句,只要 while 表达式的计算结果为 TRUE
-
我很欣赏这个写得很好的问题!也就是说,最简单的解释就像文档 (php.net/while) 所说:“它告诉 PHP 重复执行嵌套语句,只要 while 表达式的计算结果为 TRUE。”
-
@Dagon @JoelHinz 当你说表达时,你到底指的是什么?表达式字面上是变量
$var吗?因为如果表达式是$var = testfunction(..)一起的语句,那么我会假设它应该始终评估为TRUE(我执行的测试不是这种情况),因为无论返回值如何,它总是被成功执行. -
不,
while循环正在评估$var,其值设置为函数testfunction(...)的返回值。因此,只要函数返回 true 或任何真实的值(如数字、字符串、数组、对象),while 循环就会继续运行。换句话说,while循环对$var: 执行布尔检查,并查看在布尔模式下评估为真/假的内容refer to the PHP docs。 -
扩展@Terry - 基本上它说运行循环,直到 $param1 或 $param2 中的某些内容发生更改以使函数返回 false 而不是 true。
标签: php function while-loop