三元内部条件错误做法?
Ternary Inside Conditional Bad Practice?
将三元组放在条件语句中是不好的做法吗?
考虑以下代码:
<?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)
有没有更好的方法来实现我上面想做的事情?我很想知道,谢谢!
是的,有更好的方法来做到这一点。你的发言
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
结果的位置(第二个位置)相反。
非常喜欢。代码变得冗余且难以阅读。
将三元组放在条件语句中是不好的做法吗?
考虑以下代码:
<?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)
有没有更好的方法来实现我上面想做的事情?我很想知道,谢谢!
是的,有更好的方法来做到这一点。你的发言
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
结果的位置(第二个位置)相反。
非常喜欢。代码变得冗余且难以阅读。