if语句中的表达式应返回TRUE或FALSE,但它运行函数。PHP

if语句中的表达式应返回TRUE或FALSE,但它运行函数。PHP,php,Php,一个新手问题。 这是一个函数和一个if语句 <?php function test(){ echo "somedata"; } if(test()) ?> 此代码生成: 一些数据 根据文档,if表达式只应返回TRUE或FALSE,但除此之外,函数将运行。为什么会发生这种情况?PHP计算if表达式,以了解epression是否生成真实值。除了执行表达式中出现的函数之外,没有其他方法可以找到答案 在这个例子中,很明显

一个新手问题。 这是一个函数和一个if语句

<?php

    function test(){
        echo "somedata";    
    }

    if(test())      

?>

此代码生成: 一些数据


根据文档,if表达式只应返回TRUE或FALSE,但除此之外,函数将运行。为什么会发生这种情况?

PHP计算
if
表达式,以了解epression是否生成真实值。除了执行表达式中出现的函数之外,没有其他方法可以找到答案

在这个例子中,很明显:

 if (sqrt(4) > 1)
 
PHP当然必须调用函数
sqrt
,除非在这种情况下它是一个没有副作用的函数,而您的函数
test
也执行
echo
。其次,它返回一个值,而
test
不返回。但是PHP只能通过执行函数来发现

请注意,表达式通常可以返回任何内容,但PHP有以下规则:

转换为布尔值时,以下值被视为
FALSE

  • 布尔值
    FALSE
    本身
  • 整数0(零)
  • 浮动0.0(零)
  • 空字符串和字符串“0”
  • 零元素数组
  • 具有零成员变量的对象(仅限PHP 4)
  • 特殊类型
    NULL
    (包括未设置的变量)
  • 从空标记创建的SimpleXML对象
其他每一个值都被视为
TRUE
(包括任何资源)


如果函数运行时未执行
return
语句,则返回的值为
null
,因此根据上述规则,
if
条件将是错误的。

PHP计算
if
表达式,以了解epress是否生成真实值。除了执行表达式中出现的函数之外,没有其他方法可以找到答案

在这个例子中,很明显:

 if (sqrt(4) > 1)
 
PHP当然必须调用函数
sqrt
,除非在这种情况下它是一个没有副作用的函数,而您的函数
test
也执行
echo
。其次,它返回一个值,而
test
不返回。但是PHP只能通过执行函数来发现

请注意,表达式通常可以返回任何内容,但PHP有以下规则:

转换为布尔值时,以下值被视为
FALSE

  • 布尔值
    FALSE
    本身
  • 整数0(零)
  • 浮动0.0(零)
  • 空字符串和字符串“0”
  • 零元素数组
  • 具有零成员变量的对象(仅限PHP 4)
  • 特殊类型
    NULL
    (包括未设置的变量)
  • 从空标记创建的SimpleXML对象
其他每一个值都被视为
TRUE
(包括任何资源)


如果函数运行时未执行
return
语句,则返回值为
null
,因此根据上述规则,
if
条件将是错误的。

值得注意的是,
echo“somedata”
在这里完全无关。函数也可以有空体-只要它没有得到任何
return
,它完全不在乎函数做什么。@MarcinOrlowski,当然除非函数执行
exit()
(或等效的
die()
)或抛出异常。在这种情况下,
if()。当精确计时时,关闭机器或终止PHP进程也可能会影响此
if()
,但这并不是我们要麻烦的。值得注意的是,
echo“somedata”
在这里是完全无关的。函数也可以有空体-只要它没有得到任何
return
,它完全不在乎函数做什么。@MarcinOrlowski,当然除非函数执行
exit()
(或等效的
die()
)或抛出异常。在这种情况下,
if()。当精确计时时,关闭机器或终止PHP进程也可能会影响此
if()
,但这不是我们要麻烦的。