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

时间:2016-06-01 17:53:34

标签: php

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

<?php

    function test(){
        echo "somedata";    
    }

    if(test())      

?>

此代码生成: somedata

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

1 个答案:

答案 0 :(得分:3)

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条件将根据上述规则进行伪造。