>  기사  >  백엔드 개발  >  PHP 조건 연산자에서 발생하는 문제와 해결 방법에 대해

PHP 조건 연산자에서 발생하는 문제와 해결 방법에 대해

不言
不言원래의
2018-07-14 13:54:211509검색

이 글은 주로 PHP 조건부 연산자에서 발생하는 문제와 해결 방법을 소개합니다. 이제 도움이 필요한 친구들이 참고할 수 있도록 공유하겠습니다.

#🎜🎜 #오늘 저는 PHP에서 조건부 연산자의 중첩 사용에 대한 문제 (

ternaryexpression)

phenomenon

먼저 C 언어 코드를 살펴보겠습니다(

test.c):

#include<stdio.h>
int main() {
  int x = 1;
  int shit = x == 1 ? 100 : 
     x == 2 ? 200 : 300;
  printf("shit的值:%d\n", shit);
  return 0;
}</stdio.h>
컴파일 및 실행

root$ gcc test.c -o test && ./test
shit的值:100
답은 예상한 대로입니다. x==1이므로 100이 할당되기 때문입니다. 젠장.

그러나 위 코드를 PHP로 다시 작성하면(

test.php):

<?php $x = 1;
$shit = $x == 1 ? 100 : 
   $x == 2 ? 200 : 300;
echo "shit的值:$shit\n";
실행:

root$ php test.php
shit的值:200
#🎜 🎜#반환된 결과가 다른 것으로 나타났습니다. 이유는 무엇인가요?

Troubleshooting

첫 번째 의심은

비교 연산자

(==) 및 조건 연산자 가 PHP (?:) 우선순위 문제는 PHP 공식 문서를 확인해 보겠습니다

==

우선 순위는 ?:(C 언어에서도 마찬가지)보다 높으므로

$shit = $x == 1 ? 100 : 
   $x == 2 ? 200 : 300;

$shit = ($x == 1) ? 100 : 
   ($x == 2) ? 200 : 300;

과 동일하며 한 번 실행하면 true입니다. 연산자 우선순위로 인해 문제가 발생할 가능성을 배제할 수 있습니다.

그런데 공식 문서에는

연산자 조합 방향 예시 설명에 이런 문장이 있습니다.

:

다음은 다음과 같습니다. 기사에 설명된 현상은 매우 유사하며 문제는 여기에 있어야 합니다. 몇 가지 조사 결과 다음과 같은 결론을 얻었습니다.

PHP 조건 연산자에서 발생하는 문제와 해결 방법에 대해Conclusion

    C 언어에서 조건 연산자(?:)의 조합 방향은 다음과 같습니다. #🎜🎜 #오른쪽에서 왼쪽으로
  • , 각 평가는 가장 오른쪽 하위 표현식부터 시작하므로

    int x = 1;
    
    int shit = x == 1 ? 100 : 
         x == 2 ? 200 : 300;
    //等效于
    int shit = x == 1 ? 100 : 
         (x == 2 ? 200 : 300);
    //等效于
    int shit = x == 1 ? 100 : 
         (300);// 100
  • # 🎜🎜#조합 방향 PHP의 조건부 연산자(?:)는
왼쪽에서 오른쪽으로
    이며 각 평가는 가장 왼쪽 하위 표현식에서 시작하므로 #🎜🎜 #
  • $x = 1;
    $shit = $x == 1 ? 100 : 
       $x == 2 ? 200 : 300;
    //等效于
    $shit = ($x == 1 ? 100 : 
       $x == 2) ? 200 : 300;
    //等效于
    $shit = (100) ? 200 : 300;// 200
    # 🎜🎜#PHP의 조건부 연산자 조합 방향으로 인해 C/C++와 같은 중첩된 조건부 연산자를 통해 if-elseif-elseif-else를 달성할 수 없습니다. 나중에 하위 표현식에 괄호를 추가하지 않는 한 표현식의 효과는 입니다. . 이 경우 다음과 같이 해결할 수 있습니다:
    $shit = $x == 1 ? 100 : 
       ($x == 2 ? 200 : 300);
  • 그러나 조건 분기가 더 많은 경우 코드 가독성 문제가 발생합니다(중괄호):
$shit = $x == 1 ? 100 :
     ($x == 2 ? 200 :
     ($x== 3 ? 300 :
     ...
     ($x == 8 ? 800 : 900)))))));
# 🎜🎜# 대괄호를 쌓지 않는 PHP의 작성 방법은 실행 결과 측면에서 C/C++와 일치하지 않고, 대괄호를 추가해야만 작성할 수 있으므로 예상한 결과를 얻을 수 있도록 기본 바인딩 방향을 변경하므로 PHP 문서에서는 간단히 설명하지 않습니다. 중첩된 조건부 연산자 사용을 권장합니다:

참고: 단일 내에서 둘 이상의 삼항 연산자를 사용할 때 PHP의

동작을 "스태킹"하지 않는 것이 좋습니다. 진술은 명백하지 않습니다

위 내용은 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되기를 바랍니다. 더 많은 관련 내용은 PHP 중국어 홈페이지를 주목해주세요!

관련 권장 사항:


프레임워크 개발의 종속성 주입, 컨테이너 및 모양 패턴에 대해 이야기해 보겠습니다(2부)

#🎜 🎜#

PHP의 높은 동시성 및 대규모 트래픽 문제를 해결하는 방법

위 내용은 PHP 조건 연산자에서 발생하는 문제와 해결 방법에 대해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.