Это плохая практика — помещать троичную в условную?
Рассмотрим следующий код:
<?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 вы можете пойти еще дальше, используя нулевой оператор объединения:
if ($hideEditButton ?? true) && $this->request->session()->read('Auth.User.id') == $user->id)
В этом случае троичный оператор только усложняет чтение условия. На мой взгляд, это особенно нелогично, потому что вы используете буквальный true
в третьей части оператора; это противоположность того, где вы, как правило, ожидаете увидеть true
результат (второе место).
Очень сильно. Код становится избыточным и трудным для чтения.