【发布时间】:2016-06-01 17:53:34
【问题描述】:
一个新手问题。 这是一个函数和一个 if 语句。
<?php
function test(){
echo "somedata";
}
if(test())
?>
此代码产生: 一些数据
根据文档,if 表达式应该只返回 TRUE 或 FALSE,但除此之外,函数运行。为什么会这样?
【问题讨论】:
标签: php
一个新手问题。 这是一个函数和一个 if 语句。
<?php
function test(){
echo "somedata";
}
if(test())
?>
此代码产生: 一些数据
根据文档,if 表达式应该只返回 TRUE 或 FALSE,但除此之外,函数运行。为什么会这样?
【问题讨论】:
标签: php
PHP 计算 if 表达式以了解 epression 是否产生真值。除了执行表达式中出现的函数之外,没有其他方法可以找出答案。
在这个例子中很清楚:
if (sqrt(4) > 1)
PHP 当然必须调用函数sqrt,除了在这种情况下它是一个没有副作用的函数,而你的函数test 也执行echo。其次,它返回一个值,而test 没有。但是那个PHP只能通过执行函数才能发现。
请注意,表达式通常可以返回任何内容,但 PHP 对 it considers truthy or falsy 有规则:
转换为布尔值时,以下值被视为
FALSE:
- 布尔值
FALSE本身- 整数 0(零)
- 浮点数 0.0(零)
- 空字符串和字符串“0”
- 零元素的数组
- 一个成员变量为零的对象(仅限 PHP 4)
- 特殊类型
NULL(包括未设置的变量)- 从空标签创建的 SimpleXML 对象
所有其他值都被视为
TRUE(包括任何资源)。
如果函数运行时没有执行return语句,则返回值为null,因此根据上述规则if条件将是假的。
【讨论】:
echo "somedata"在这里完全不相关。该函数也可以有空主体——只要它没有return,它完全不关心函数的作用。
exit()(或等效的die()),或者抛出异常。有一些other creative ways 打破了正常的执行流程。
if() 不会被评估,所以我想说这仍然无关紧要,因为我们假设正常流程。关闭机器或杀死 PHP 进程也可能会影响这个 if() 时准确计时,但这不是我们应该打扰的。