【问题标题】:An expresstion in if statement should return TRUE or FALSE, but it runs a function. PHPif 语句中的表达式应该返回 TRUE 或 FALSE,但它运行一个函数。 PHP
【发布时间】:2016-06-01 17:53:34
【问题描述】:

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

<?php

    function test(){
        echo "somedata";    
    }

    if(test())      

?>

此代码产生: 一些数据

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

【问题讨论】:

    标签: php


    【解决方案1】:

    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,它完全不关心函数的作用。
    • @MarcinOrlowski,当然除非函数执行exit()(或等效的die()),或者抛出异常。有一些other creative ways 打破了正常的执行流程。
    • 在这种情况下,if() 不会被评估,所以我想说这仍然无关紧要,因为我们假设正常流程。关闭机器或杀死 PHP 进程也可能会影响这个 if() 时准确计时,但这不是我们应该打扰的。
    猜你喜欢
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-29
    相关资源
    最近更新 更多