【问题标题】:Why ternary operation return false result? [duplicate]为什么三元运算返回错误结果? [复制]
【发布时间】:2019-09-05 08:22:27
【问题描述】:

我有自定义三元运算,可以从数字中获取用户性别:

代码:

$value = 0;
$gender = $value === 0 ? 'Male' : $value === 1 ? 'Female' : 'Other';
echo $gender;

在我看来,这段代码必须返回Male,但返回FemaleHere 就是例子。

或者我的三元运算不正确,无法获得Male 结果?

我的三元运算不等于这段代码?

代码:

if($value === 0) $gender = 'Male';
elseif($value === 1) $gender = 'Female';
else $gender = 'Other';

【问题讨论】:

  • 不知道为什么,但你应该像这样为 else-if 三元添加括号:$value === 0 ? 'Male' : ($value === 1 ? 'Female' : 'Other');

标签: php ternary-operator


【解决方案1】:

这是一个优先级问题,您的代码被评估为:

$gender = ($value === 0 ? 'Male' : $value === 1) ? 'Female' : 'Other';

但你想要的是:

$gender = $value === 0 ? 'Male' : ($value === 1 ? 'Female' : 'Other');

这是因为 PHP 从左到右计算三元运算符。请参阅manual

【讨论】:

  • 有大量重复项,但您决定再创建一个。
  • @u_mulder 我尝试了谷歌搜索和 SO 搜索,但找不到。可以关闭吗?
  • @u_mulder 谢谢。我已将其添加到我的受骗者列表中。我的问题是我只搜索“不工作”,这带来了很多与此不同的问题。
【解决方案2】:

你需要添加一些括号,参考here

<?php

$value = 0;
$gender = $value === 0 ? 'Male' : ($value === 1 ?'Female' : ('Other'));
echo $gender;

检查示例:here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 2021-04-28
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    相关资源
    最近更新 更多