Тройной Внутри Условный Плохая Практика?

Это плохая практика — помещать троичную в условную?

Рассмотрим следующий код:

        <?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)

Есть ли лучший способ добиться того, что я пытаюсь сделать выше? Я хотел бы знать, спасибо!

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 вы можете пойти еще дальше, используя нулевой оператор объединения:

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

В этом случае троичный оператор только усложняет чтение условия. На мой взгляд, это особенно нелогично, потому что вы используете буквальный true в третьей части оператора; это противоположность того, где вы, как правило, ожидаете увидеть true результат (второе место).

1

Другие решения

Очень сильно. Код становится избыточным и трудным для чтения.

-2

По вопросам рекламы [email protected]