PHP:逻辑运算符:为什么 (5 || 3) 返回 1


PHP: Logical Operator: Why does (5 || 3) return 1?

在构建一个小型反馈解决方案时,人们可以给一些星(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 中的 or 运算符,它的计算结果为 truefalse 。如果你想要二进制文件或运算符,你应该改用|

因为所有不等于零的东西都像true这样处理,所以所有的值都给出true是有道理的,作为整数变成1

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

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

与其他语言相比,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 中,你可以通过使用三元运算符来实现相同的目的:

$result = $int ? $int : 1;

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

或者从 PHP 5.3 开始:

$result = $int ?: 1;

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

来吧,它正在返回您看到的 1 的TRUE

试试这个

echo TRUE;    //1

您正在寻找的是三元运算符

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

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