三元有条件的不良做法?

时间:2017-03-26 01:42:55

标签: php conditional flags ternary

将三元组放入条件中是不好的做法?

请考虑以下代码:

        <?php if ((isset($hideEditButton) ? $hideEditButton : true) && $this->request->session()->read('Auth.User.id') == $user->id): ?>
            <div class="hr-line-dashed"></div>
            <div class="row">
                <div class="col-sm-4">
                    <?= $this->Html->link(__('Edit Profile'), ['action' => 'account'], ['class' => 'btn btn-xs btn-primary']) ?>
                </div>
            </div>
        <?php endif; ?>

我关注的代码的特定部分位于条件:(isset($hideEditButton) ? $hideEditButton : true)

有没有更好的方法来实现我上面尝试做的事情?我很想知道,谢谢!

2 个答案:

答案 0 :(得分:1)

是的,有更好的方法可以做到这一点。你的陈述

if ((isset($hideEditButton) ? $hideEditButton : true) && $this->request->session()->read('Auth.User.id') == $user->id)

可以改写为

if ((!isset($hideEditButton) || $hideEditButton) && $this->request->session()->read('Auth.User.id') == $user->id)

在PHP 7中,您可以使用null coalescing operator

进一步发展
if ($hideEditButton ?? true) && $this->request->session()->read('Auth.User.id') == $user->id)

此实例中的三元运算符使得读取条件变得更加困难。在我看来,它特别违反直觉,因为你在运算符的第三部分使用了文字true;它与您通常期望看到true结果的位置相反(第二个位置)。

答案 1 :(得分:-2)

非常。代码多余且难以阅读。