이 기사에서는 VLD 도구를 사용하여 php의 opcode를 분석하여 이유를 설명합니다.
T1.php 코드
$i = 1;
$i+$i++ 🎜>
라인 # * op ----------- ------------- 2 0 > 할당 ~ 무료 ~ >경로 #1: 0, T2.php 코드 $i = 1; $i+$i+$i++ Vld2 코드 ops 수: 6 컴파일된 변수: !0 = $i line # * op fetch ext return 피연산자 ------ ----------------------------- -------- -------------------------2 0 & gt;
2 post_inc ~ 2! 0
3 추가 ~ 3 ~ 1, ~ 2
4 무료 ~ 34 5 & gt; 분기: # 0; 줄: 2- 4; sop: 0; eop: 5 경로 #1: 0, 비교 두 장의 사진 2와 4를 보면 왜 결과가 놀라운지 알 수 있습니다 먼저 1과 2의 실행 결과를 분석합니다먼저 $i에 값이 1이면 $i++가 스스로 증가하고 결과 1이 임시 변수 ~1($i)에 복사된 다음 $i가 2로 증가합니다. 즉, 최종은 !0=2입니다. 결과 ~2 = ~1+!0 === 3; 3,4를 분석해 보겠습니다먼저 $i에 1의 값이 할당되고 그 다음에는 $i+ $i = !0+!0 == ~1 == 2 $i++는 자체 결과 1을 증가시켜 임시 변수 ~2 ($i)에 복사합니다. 최종 결과는 ~1+~2 == 2+1입니다. ===3;