2017-03-26 2 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 ((isset($hideEditButton) ? $hideEditButton : true) && $this->request->session()->read('Auth.User.id') == $user->id) 

사용하여, 당신은 훨씬 더 갈 수 PHP 7에서

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

로 다시 쓸 수있는 null coalescing operator :

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

이 경우의 삼항 연산자 그냥 어렵게한다 조건을 읽을 수 있습니다. 필자의 의견으로는 연산자의 세 번째 부분에 리터럴 true을 사용하기 때문에 특히 직관적이지 않습니다. 이것은 보통 true 결과 (두 번째 지점)를 볼 것으로 예상되는 것과는 정반대입니다.

+0

개선해 주셔서 감사합니다! 때로는 너무 많이 일하는 것을 두려워합니다. :) –

+0

@ TravisRowland 거기에 있었으니! :) –

-2

대단히. 코드가 중복되고 읽기가 어렵습니다.