【问题标题】:Result not displayed when comparison operation returns false [duplicate]比较操作返回false时不显示结果[重复]
【发布时间】:2013-04-04 09:27:04
【问题描述】:

我正在尝试显示比较操作($a > $b) 的结果,它不显示以下代码的任何内容,而操作($a < $b) 显示结果1

我想知道为什么第一个操作没有返回0,因为它是false

<?php
    $a = 1;
    $b = 5;
    print ($a > $b);
    echo "Output";
    print ($a < $b);
?>

【问题讨论】:

    标签: php


    【解决方案1】:

    很遗憾,这是一个非常普遍的误解。 0“是”不是falsefalsefalse,一个布尔值。 00,一个数字。在非类型安全比较中,0 大致等于 false

    当您 echoprint false 时,它被转换为字符串。 false 转换为字符串是 "",一个空字符串。 true 转换为字符串是"1",字符串“1”。

    阅读http://php.net/manual/en/language.types.string.php#language.types.string.casting

    【讨论】:

    • PHP 没有客观的真理标准——它对真理的要求很高而且很快。根据 PHP,真相是相对的。 “真假是我想要的。”
    • @Patashu 那是bullcrp。 PHP 已经完美定义了truth tables,你只需要学习它们。 PHP 不是随机的。归结为以下*错误false0'0'''nullarray()。其他的都是真实的
    • @Patashu 该评论也与手头的主题无关:type juggling
    • 你可以记住PHP中所有奇怪的比较规则,但很容易出错。例如,phpsadness.com/sad/47 有一些我最喜欢的陷阱,因为“包含数字的字符串”可能会在你意想不到的时候突然变为真 - 例如,"1e1" 是一个数字......
    • @Patashu 但又是perfectly defined behavior。再一次,你需要学习你的语言,尤其是当它有很多这样的自动魔法发生的时候。并不是说您对此无能为力,而是任由 PHP 摆布;您只需要知道您的操作员做什么以及规则是什么。每种语言都有其类型比较的陷阱,抱怨它并不会让你成为一名优秀的程序员。
    【解决方案2】:

    整数比较 ($a boolean,可以是 truefalse
    print 的工作方式是为 true 打印“1”,为 false 打印任何内容。

    【讨论】:

      【解决方案3】:

      这是由于 PHP 处理错误值的方式。

      echo ($a &gt; $b) 也不会输出任何内容。

      要让您的语句输出 0 以表示错误条件,您需要强制转换为整数:

      print (int)($a > $b);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-13
        • 2020-06-05
        • 2015-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多