【问题标题】:Why can't I have a PHP condition written as 1<$x<3?为什么我不能将 PHP 条件写为 1<$x<3?
【发布时间】:2011-07-14 14:25:01
【问题描述】:

我已经挖掘了一些,但我似乎无法找到一个简单的答案来解释为什么你不能编写类似的代码

<?php 
  $x=2;
  if(1<$x<3) {
    echo "Win!";
    } else {
    echo "Lose!";
  }
?>

我的直觉告诉我,因为 PHP 从左到右读取,它评估语句的前半部分 (1&lt;$x),然后只看到

【问题讨论】:

标签: php syntax logic conditional-statements


【解决方案1】:

PHP 计算1 &lt; $x,然后将其结果与3 进行比较。换句话说,如果添加括号,PHP 会将其视为((1 &lt; $x) &lt; 3)

如果1 &lt; $x为真,则比较变为1 &lt; 3;如果为 false,则为 0 &lt; 3。这是由于类型转换(从布尔到整数)。两者都评估为真,因此始终满足 if 条件。

你确实必须这样写:

if (1 < $x && $x < 3)

【讨论】:

  • 谢谢,这是有道理的……但是当我使用示例代码时,我实际上在键盘上遇到了错误。所以要么这个错误是一个键盘问题(并且不会发生在实际的服务器上,条件总是会像你说的那样评估为真)......或者 PHP 无法处理评估我的假设条件:codepad.org/E1ID4kVw
  • PHP 的原始解析器甚至不能将:: 视为命名空间分隔符,而您希望它处理那个? 笑话>
  • @Charles:你必须承认它知道它的希伯来语:)(好吧,它的作者知道)
【解决方案2】:

&lt;&gt; 运算符计算为布尔值。这是从 C 继承而来的设计选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    相关资源
    最近更新 更多