【问题标题】:Why has PHP different (non-equal) versions of the logical operators (&& vs. and, || vs or)?为什么 PHP 有不同(不相等)版本的逻辑运算符(&& vs. and,|| vs or)?
【发布时间】:2015-12-14 06:42:38
【问题描述】:

我知道 PHP 中 and&&or|| 之间的区别,它们在解析时具有不同的优先级 (manual)。

我的问题是它们为什么存在,历史原因是什么,语言创建者引入同一数学运算符的多个但不相等的实例的意图是什么?

【问题讨论】:

  • 嗯,你知道,PHP 一直有点混乱。所以,不要要求与 PHP 相关的所有内容的一致性。看一看:eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design
  • 想解释一下 -1 吗? SO.com 这些天投反对票的速度很快......
  • @FooBar 他们总是快速投反对票。有我的支持;)
  • 投反对票可能是因为 SO 不适用于此类问题。
  • 询问开发人员在做出特定决定时的想法是不可能回答的,除非您实际上是那个开发人员......否则他们只能是猜测......并且给定 PHP,这通常会导致侮辱性响应

标签: php language-design logical-operators boolean-expression


【解决方案1】:

来自precedence page的cmets

注意'and vs &&'或'||之间的优先级差异与或':

<?php
$bool = true && false;
var_dump($bool); // false, that's expected

$bool = true and false;
var_dump($bool); // true, ouch!
?>

因为 'and/or' 的优先级低于 '=' 但 '||/&&' 的优先级更高。

【讨论】:

  • 这太棒了。 PHP 的荣誉。
  • @Amarnasan 是的,它是 PHP 的众多陷阱之一,但当时可能有理由添加它。我不为这样做的智慧辩护
  • 我知道所有这些奇怪的行为。 ;) 我问了它们为什么存在
  • PHP 已经从 Perl 复制了这个,但恕我直言,它在 Perl 语法中更加连贯地集成。 and/or 主要用于检查某些内容并提供替代方案,例如$a = doSomething() or die('...');,与 &&/|| 相反,后者用于计算布尔值的结果。
  • @syck 不错,不知道 Perl 也有这个。但是我知道 PHP 起源于 Perl。所以我们离答案越来越近了。 :)
猜你喜欢
  • 1970-01-01
  • 2013-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多