<코드><?php $a = 1; $b = 2; $c = 3; $d = 4; $a = $b !== $c && $d = $b == $c; var_dump($a,$d);종료;
여기서 내가 이해하는 것은 다음과 같습니다. 첫째, !==가 &&보다 우선순위가 높기 때문에 먼저 $b !== $c(참) 및 $b == $c*(거짓)를 판단한 다음 && 판단을 수행하고 &&의 경우 왼쪽을 먼저 실행한 다음 결과에 따라 오른쪽을 실행합니다. 그러면 왼쪽은 $a = true이고 오른쪽은 $d = false인데 왜 인쇄됩니까? $a 거짓인가요? 그러면 이것이 실제로 다음과 같다는 것을 이해합니다:
$a = (true && ($d = false));
이것을 이해할 수 없습니다. &&가 왼쪽의 표현식을 참조하지 않고 왼쪽의 $b !== $c 값을 참조하는 경우 $d = false가 오른쪽에서 실행될 수 있는 이유는 무엇입니까? 이 조합은 무엇인가요?
많은 정보를 확인하고 여러 동료들에게 물어보니 다들 설명하기 어렵고 일상적인 개발에는 사용할 수 없다고 합니다. 강박장애, 정말 알고 싶습니다. PHP의 연산자 우선순위와 실행 문제를 이해하고 판단하는 방법에 대해 조언을 좀 부탁드립니다. 실제로 오픈 소스에는 이러한 작성 방법이 많이 있습니다.
사실 $a = $b && $b = $ c;
와 유사합니다. 마지막으로 $a는 true이지만 $b는 $c의 값입니다. 위의 세 변수 abc는 모두 1, 2, 3입니다.
伊谢尔伦2017-05-16 13:06:40
논리 연산자의 경우 각 논리 연산자의 양쪽 표현식이 전체로 결합됩니다. $b !== $c && $d = $b = = $c
, 이 표현식의 경우 두 가지 조합이 생성됩니다: $b !== $c && $d = $b == $c
,对于这个表达式,将会生成两个组合: ($b !== $c) && ($d = $b == $c)
组合1: ($b !== $c)
组合2: ($d = $b == $c)
所以先执行组合1($b !== $c)
,结果是true
,根据短路运算,需要执行组合2($d = $b == $c)
,对于这个组合,里面又由于==
运算符优先级高,执行==
,在赋值,也就是false
. 所以最终组合1的结果是true
,组合2的结果是false
,所以$a=false
.
这里解释了可以执行右边的赋值表达式,而不执行左边的赋值表达式,因为左边的赋值表达式优先级低,在执行它之前,需要执行完!==
, 再执行&&
,之后接着执行==
,再执行右边的=
,再执行左边的=
($b !== $c) && ($d = $b == $c)
combination 1 : ($b !== $c)
($d = $b == $c)
🎜그러므로 조합 1( 첫 번째 $를 실행하세요. b !== $c)
, 단락 동작, 조합 2 ($d = $b == $c)에 따르면 결과는 true
입니다. code>를 실행해야 합니다. 이 조합의 경우 ==
연산자의 우선순위가 높기 때문에 할당하기 전에 ==
가 실행되며 이는 false입니다. code>이므로 결국 조합 1의 결과는 true
이고, 조합 2의 결과는 false
이므로 $a=false
입니다. 🎜🎜여기에서는 왼쪽의 할당식을 실행하는 대신 오른쪽의 할당식을 실행해도 된다고 설명합니다. 왜냐하면 왼쪽의 할당식은 실행하기 전에 !== code>를 실행한 다음 && code>를 실행하고 ==
를 실행한 다음 오른쪽의 =
를 실행한 다음 를 실행해야 합니다. =
왼쪽🎜.🎜회신하다0
淡淡烟草味2017-05-16 13:06:40
하소연 하러 왔습니다. 이 줄은 $a = $b !== $c && $d = $b == $c;
주의깊게 복사해서 붙여넣었습니다. 하하, 666..
형님:
1. 그런 코드는 책에 있습니다.
2. 그런 코드 프로젝트는 거의 존재하지 않습니다. 0
3 비슷한 요구 사항이 있더라도 가독성을 높이기 위해 ()를 사용합니다. 더 강한 모델
4. 이러한 요구 사항은 간단하게 이해될 수 있지만 사용성이 강하지는 않습니다.