【问题标题】:PHP - Get bool to echo false when falsePHP - 假时获取布尔以回显假
【发布时间】:2011-06-24 08:03:09
【问题描述】:

以下代码不打印任何内容:

$bool_val = (bool)false;
echo $bool_val;

但是下面的代码打印出1:

$bool_val = (bool)true;
echo $bool_val;

$bool_valfalse 时,有没有比添加if 语句更好的方法来打印0false

【问题讨论】:

  • 如果这是为了调试,请尝试使用 var_dump 而不是 echo。
  • (bool) 演员表是多余的,您不需要将 bool 转换为 bool:(bool) true === true
  • 有没有办法配置 PHP 使 echo 0==1; 输出 0false

标签: php boolean


【解决方案1】:

您将布尔值转换为布尔值并期望显示一个整数。它适用于true,但不是错误的。因为你期望一个整数:

echo (int)$bool_val;

【讨论】:

    【解决方案2】:

    var_export 提供所需的功能。

    这将总是打印一个值,而不是为nullfalse 打印任何内容。 var_export 打印它传递的参数的 PHP 表示,输出可以复制/粘贴回 PHP。

    var_export(true);    // true
    var_export(false);   // false
    var_export(1);       // 1
    var_export(0);       // 0
    var_export(null);    // NULL
    var_export('true');  // 'true'   <-- note the quotes
    var_export('false'); // 'false'
    

    如果您想打印字符串"true""false",您可以转换为布尔值,如下所示,但要注意特殊性:

    var_export((bool) true);   // true
    var_export((bool) false);  // false
    var_export((bool) 1);      // true
    var_export((bool) 0);      // false
    var_export((bool) '');     // false
    var_export((bool) 'true'); // true
    var_export((bool) null);   // false
    
    // !! CAREFUL WITH CASTING !!
    var_export((bool) 'false'); // true
    var_export((bool) '0');     // false
    

    【讨论】:

      【解决方案3】:

      这是最简单的方法:

      $text = var_export($bool_value,true);
      echo $text;
      

      var_export($bool_value)
      

      如果第二个参数不为真,则直接输出结果。

      【讨论】:

      • 谢谢。没有必要让愚蠢的语言变得更奇怪。即使在 php 中,也有一些变通方法可以让它变得更好。
      【解决方案4】:

      不,因为另一种选择是修改 Zend 引擎,很难称其为“更好的方式”。

      编辑:

      如果你真的想,你可以使用数组:

      $boolarray = Array(false => 'false', true => 'true');
      echo $boolarray[false];
      

      【讨论】:

      • 这是一种奇怪的方法,因为数组键不能是布尔类型。 PHP 会将其转换为数组(0 => 'false', 1 => 'true')。
      • @mehaase:我很久以前就不再尝试对 PHP 的类型处理应用任何类型的逻辑了。我只是顺其自然。
      【解决方案5】:

      这将按原样打印出布尔值,而不是 1/0。

          $bool = false;
      
          echo json_encode($bool);   //false
      

      【讨论】:

      • 很好的答案,特别是如果您确实需要 JSON 中的布尔值!
      • 这是最好的答案
      • 简单有效!一些 GraphQL 需要这个
      【解决方案6】:

      json_encode 开箱即用,但它并不漂亮(缩进等):

      echo json_encode(array('whatever' => TRUE, 'somethingelse' => FALSE));
      

      ...给...

      {"whatever":true,"somethingelse":false}
      

      【讨论】:

        【解决方案7】:

        这给出了01

        intval($bool_val);
        

        PHP Manual: intval function

        【讨论】:

          【解决方案8】:
          echo(var_export($var)); 
          

          $var为布尔变量时,会打印出truefalse

          【讨论】:

          • 在我看来,在 JavaScript 中导出 PHP 变量时最好的解决方案!
          • 这有点误导。在这种情况下,var_export 将回显其结果并返回 null,因此 var_export 正在输出true || false,而echo 正在回显null ('')。要从var_export 返回输出,您需要提供第二个参数true
          • @RPDeshaies 如果你想将 php 变量导出到 javascript,json_encode 是一个更好的选择。
          【解决方案9】:

          sprintf()%b 选项会将布尔值转换为整数:

          echo sprintf("False will print as %b", false); //False will print as 0
          echo sprintf("True will print as %b", true); //True will print as 1
          

          如果您不熟悉它:您可以给这个函数提供任意数量的参数,而第一个参数应该是您的输出字符串,并带有替换字符串,如 %b%s 用于一般字符串替换。

          每个模式将按顺序被参数替换:

          echo sprintf("<h1>%s</h1><p>%s<br/>%s</p>", "Neat Headline", "First Line in the paragraph", "My last words before this demo is over");
          

          【讨论】:

            【解决方案10】:

            我喜欢这个把它打印出来

            var_dump ($var);
            

            【讨论】:

              【解决方案11】:

              你可以使用三元运算符

              echo false ? 'true' : 'false';
              

              【讨论】:

                【解决方案12】:
                echo $bool_val ? 'true' : 'false';
                

                或者如果你只想在它为假时输出:

                echo !$bool_val ? 'false' : '';
                

                【讨论】:

                • 它令人困惑、庞大且无益,没有任何明显的好处。我已经编程了 20 多年,从来没有我想让 'false' 自动转换为空白.. null 很多次,但绝不是 'false'。我的 Java/Spring/Hibernate 开发比普通的 PHP 系统更干净、更强大。 我可以找到很多困惑的人.. stackoverflow.com/questions/9042002/… 但我找不到任何关于此设计“功能”的真正原因的参考.
                • 我真的很想根据 PHP 文档中的这一点来争论为什么 (string)FALSE == "" 是一个好主意:“布尔 TRUE 值被转换为字符串“1”。布尔 FALSE被转换为“”(空字符串)。这允许在布尔值和字符串值之间来回转换。但我对其进行了测试,并且 (bool)"0" 也评估为 FALSE,所以......我不知道。我喜欢 PHP,但我不能否认这有点奇怪 >_>
                • FALSE == '' 并不奇怪。它是完全有效的,并且是其他语言的一部分,包括 javascript。奇怪的是 FALSE 默认为空字符串。它应该默认为 0。总是。特别是因为 TRUE 将始终默认为 1。这打破了编程的基本规则。保持你的代码一致。这显然是一个错误。
                • 虽然这是执行此操作的最简单方法,但通过 print_r 运行包含布尔值的数组,这些值将显示为空白,除非您之前通过循环将它们换出,因此如果您'只是尝试调试或记录,查看这些值是真的还是假的还是其他看起来空白的东西会变成一个巨大的痛苦。
                • @Ben 虽然 !! '0' 在 PHP 中的计算结果为 false,但在 JS 中却是 true!! "" 在 JS 和 PHP 中为 false。
                【解决方案13】:

                尝试将布尔值转换为整数?

                 echo (int)$bool_val;
                

                【讨论】:

                • 哈...简单。完美。
                猜你喜欢
                • 2013-10-13
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2020-01-21
                • 1970-01-01
                • 1970-01-01
                • 2012-04-30
                相关资源
                最近更新 更多