2017-03-26 3 views
1

三項演算子を条件式の中に入れるのは悪い習慣ですか?私は心配ですコードの特定の部分は、条件付きの内側にある条件付きの悪いプラクティスの内部の3値?

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

私は上記やるしようとしています何を達成するための良い方法はあります?私は、感謝を知りたいです!

+0

割り当てまたは値の取得に「3値」を使用します。標準的なブール論理を条件に使用します。そうでなければ、可読性が発揮されます。 –

+0

フィードバックいただきありがとうございます。 :) –

答えて

1

はい、これを行うより良い方法があります。

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

この例では三項演算子はちょうどそれが難しくなります:あなたの声明

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

あなたがnull coalescing operatorを使用して、さらに行くことができますPHP 7で

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

のように書き換えることができ条件を読み取る。私の意見では、オペレータの3番目の部分にリテラルtrueを使用しているので、特に直感的ではありません。 trueの結果(2番目の箇所)が表示されることが通常想定される場所の反対です。

+0

改良をありがとう!時々、私はbraindeadがあまり働かないように行く。 :) –

+0

@TravisRowlandそこにいた! :) –

-2

非常に。コードは冗長で読みにくくなります。

関連する問題