【问题标题】:Can anyone explain this impossible bit of PHP logic?谁能解释这个不可能的 PHP 逻辑?
【发布时间】:2010-04-30 23:44:19
【问题描述】:

我正在尝试调试一个简单的 PHP 脚本。本质上,有一个变量定义为:

$variable = ($_GET['variable'] == 'true') ? TRUE : FALSE;

然后,在视图文件中,如果 $variable == TRUE,以下代码将显示一个框:

<? if ($variable == true) { ?>
<p class="box">You have imported a new plan.</p>
<? } ?>

现在,即使那个 $variable,如 var_dump($variable); 所示== FALSE,该 HTML 打印在 if { } 标记之间。对我来说,这违反了逻辑。我就是想不通这个问题。

此外,除了一台运行 PHP5.2 的特定服务器之外,此代码在许多 PHP4 和 PHP5 安装上都可以正常工作。

有什么可能的建议吗?线索?我正在拔头发试图弄清楚这一点。

谢谢。

【问题讨论】:

    标签: php logic


    【解决方案1】:

    永远不要与 truefalse 比较相等性,只比较身份。

    <? if ($variable) { ?>
    

    <? if ($variable === true) { ?>
    

    【讨论】:

      【解决方案2】:

      也许短标签已关闭?尝试使用

      <?PHP if ( TRUE == $variable ) : ?>
          <p class="box">You have imported a new plan.</p>
      <?PHP endif; ?>
      

      【讨论】:

        【解决方案3】:

        问题是这样的:

        <? if ($variable == true) { ?>
        

        根据 PHP 的解析规则,如果 $variable 没有被赋值为 'false' 或 'null',则 $variable 等于 'true'。

        PHP 的 true 基本上对比较没有用处,因为任何可以被类型转换为非零/非 null/非 false 的值都将评估为布尔值 true。

        以下内容:

        <?php
        
        echo '7: ', (7 == true) ? 'true' : 'false', "\n";
        echo '-1: ', (-1 == true) ? 'true' : 'false', "\n";
        echo '0: ', (0 == true) ? 'true' : 'false', "\n";
        echo 'null: ', (null == true) ? 'true' : 'false', "\n";
        echo 'true: ', (true == true) ? 'true' : 'false', "\n";
        echo 'abc: ', ('abc' == true) ? 'true' : 'false', "\n";
        echo 'array: ', (array() == true) ? 'true' : 'false', "\n";
        

        结果:

        7: true
        -1: true
        0: false
        null: false
        true: true
        abc: true
        array: false
        

        【讨论】:

          【解决方案4】:

          首先阅读以下内容: http://www.php.net/manual/en/language.types.boolean.php

          在我看来,你在这里有两个版本的真理。第一步,查找$_GET['variable'] 值是查找字符串“true”并将常量分配给$variable。在这种情况下,字符串 'true' 与布尔值无关。字符串 'true' 以外的任何内容都将导致分配 FALSE 常量。

          TRUE 和 FALSE 是 php 中预定义的常量。

          $variable 的使用不应该与真假比较。只需改用if($variable)

          SaltLake 是正确的,你应该检查你的短标签。为了安全起见,我一直使用&lt;?php ?&gt;

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-05-25
            • 2017-12-03
            • 2021-10-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-01-08
            • 2012-02-12
            相关资源
            最近更新 更多