PHP:逻辑运算符:为什么 (5 || 3) return 1?
PHP: Logical Operator: Why does (5 || 3) return 1?
在构建一个小的反馈解决方案时,人们可以给多个星(0 到 5 之间),我注意到所有用户提交的评分都只存储了 1 星。
我自己试了一下,提交了5星,后台还是显示1星。
所以我查看了代码,这是导致问题的部分:
$feedback->rating = ($wire->input->post->rating || 1);
实际上 ||
运算符并没有按照我的预期去做。
实际上每次都是 returns 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() returns 是否为 bool-ish 值,如果不是则仅使用右侧值(而不是将所有内容都转换为 int)。
||
是 PHP 中的 或 运算符,它的计算结果为 true
或 false
。如果您想要二进制或运算符,则应改用 |
。
因为所有不等于零的东西都被当作 true
处理,所以所有的评估都给出 true
是有道理的,当整数变成 1
.
您可以在此处查看更多信息:http://php.net/manual/en/language.operators.logical.php
Example ----- Name -----Result
$a || $b ------- Or ---------TRUE if either $a or $b is TRUE.
$feedback->rating = ($wire->input->post->rating || 1);
来吧,它正在返回 TRUE
,您看到的是 1
试试这个
echo TRUE; //1
您要找的是 ternary operator.
$feedback->rating = $wire->input->post->rating ?: 1;
^^
如果已设置,这将为您提供该值,否则为您提供实际的 1。
PHP ||
处理方式与其他语言不同。
In PHP 5 || 7
将始终 return 为真; ||
操作符总是 return 一个布尔值。
5 || 7 = true;
使用其他语言,例如 javascript。 5 || 7
将 return 5,7 || 1
将 return 7; ||
运算符将 return 评估为真(或最后一个参数)的参数;
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;
在构建一个小的反馈解决方案时,人们可以给多个星(0 到 5 之间),我注意到所有用户提交的评分都只存储了 1 星。
我自己试了一下,提交了5星,后台还是显示1星。
所以我查看了代码,这是导致问题的部分:
$feedback->rating = ($wire->input->post->rating || 1);
实际上 ||
运算符并没有按照我的预期去做。
实际上每次都是 returns 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() returns 是否为 bool-ish 值,如果不是则仅使用右侧值(而不是将所有内容都转换为 int)。
||
是 PHP 中的 或 运算符,它的计算结果为 true
或 false
。如果您想要二进制或运算符,则应改用 |
。
因为所有不等于零的东西都被当作 true
处理,所以所有的评估都给出 true
是有道理的,当整数变成 1
.
您可以在此处查看更多信息:http://php.net/manual/en/language.operators.logical.php
Example ----- Name -----Result
$a || $b ------- Or ---------TRUE if either $a or $b is TRUE.
$feedback->rating = ($wire->input->post->rating || 1);
来吧,它正在返回 TRUE
,您看到的是 1
试试这个
echo TRUE; //1
您要找的是 ternary operator.
$feedback->rating = $wire->input->post->rating ?: 1;
^^
如果已设置,这将为您提供该值,否则为您提供实际的 1。
PHP ||
处理方式与其他语言不同。
In PHP 5 || 7
将始终 return 为真; ||
操作符总是 return 一个布尔值。
5 || 7 = true;
使用其他语言,例如 javascript。 5 || 7
将 return 5,7 || 1
将 return 7; ||
运算符将 return 评估为真(或最后一个参数)的参数;
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;