【问题标题】:PHP: Logical Operator: Why does (5 || 3) return 1?PHP:逻辑运算符:为什么 (5 || 3) 返回 1?
【发布时间】:2016-02-08 14:58:09
【问题描述】:

在构建一个小型反馈解决方案时,人们可以给多个星(在 0 到 5 之间),我注意到所有用户提交的评分都只存储了 1 星。

我自己试过了,提交5星,后台还是1星。

所以我查看了代码,这是导致问题的部分:

$feedback->rating = ($wire->input->post->rating || 1);

实际上,|| 运算符并没有像我怀疑的那样做。 事实上,它每次只返回 1(除非双方都是 $false)。

查看下面的示例代码:

$example1 = ($true || 5);
$example2 = ($false || 5);
$example3 = ($false || $false);
$example4 = (5 || 0);
echo $example1."\n";
echo $example2."\n";
echo $example3."\n";
echo $example4."\n";

我也在这里粘贴了:https://eval.in/514978.

我的假设是,PHP 尝试根据给定的元素将语句转换为整数(0 或 1),这是真的吗?

我经常在 JavaScript 中使用 || 运算符,我可以在其中输入

var i = myFunction() || "default";

这将检查 myFunction() 是否返回布尔值,如果不只使用右侧值(而不是将所有内容都转换为 int)。

【问题讨论】:

标签: php logical-operators


【解决方案1】:

|| 是 PHP 中的 or 运算符,它的计算结果为 truefalse。如果你想要二进制或运算符,你应该改用|

由于不等于 0 的所有内容都被视为 true,因此所有评估都给出 true 是有道理的,它作为整数变为 1

您可以在此处查看更多信息:http://php.net/manual/en/language.operators.logical.php

示例 ----- 名称 -----结果
$一|| $b ------- 如果 $a 或 $b 为 TRUE,则 ---------TRUE。

【讨论】:

  • 是的,这就是我所期待的。在接下来的几分钟内接受这一点。谢谢:)
【解决方案2】:

与其他语言相比,PHP || 的处理方式有所不同。

在 PHP 中 5 || 7 将始终返回 true; || 运算符将始终返回一个布尔值。

5 || 7 = true;

在其他语言中,例如 javascript。 5 || 7 将返回 5,7 || 1 将返回 7; || 运算符将返回评估为 true 的参数(或最后一个参数);

5 || 7 = 5;
7 || 1 = 7;
0 || 7 || 1 = 7;
0 || 0 = 0;

在 PHP 中,您可以使用ternary operator

$result = $int ? $int : 1;

如果 $int 为隐式真,则 $result 将为 $int,否则 $result 将为 1;

或者从 PHP 5.3 开始:

$result = $int ?: 1;

【讨论】:

  • js中7或1如何返回1?
  • 我好像搞砸了,改格式我猜
【解决方案3】:
$feedback->rating = ($wire->input->post->rating || 1);

来吧,它正在返回 TRUE,你看到它是 1

试试这个

echo TRUE;    //1

您要查找的是 ternary operator

$feedback->rating = $wire->input->post->rating ?: 1;
                                               ^^

如果已设置,则为您提供该值,否则为您提供实际的 1。

【讨论】:

  • 当然。但即使右侧不是 1 而是 5,它也会返回 1。我只是在质疑 or 运算符(因为我习惯了以不同方式工作的 javascript-or-operator)
  • 5 || 1TRUE,不是 1 也不是 5。当你在 PHP 中回显 TRUE 时,你会得到 1
  • 我之前没有注意到对三元运算符的更改,因为您可以省略 ?和:+1
猜你喜欢
  • 2013-01-21
  • 2017-07-27
  • 2017-03-07
  • 1970-01-01
  • 2011-07-22
  • 2012-08-08
  • 1970-01-01
  • 1970-01-01
  • 2010-10-29
相关资源
最近更新 更多