pre-increment++++$a$a는 1씩 증가한 다음 $a
post-increment++$a++를 반환하고 먼저 $a를 반환한 다음 $a는 1
pre-decrement만큼 증가합니다. ---- $a$a는 자신을 1만큼 감소시킨 다음 $a
를 반환하고 감소시킵니다.-$a--먼저 $a를 반환한 다음 $a는 1만큼 감소합니다
첫 번째 참고 사항: 증가/감소 연산 기호 부울 값에는 영향을 주지 않습니다. NULL 값을 감소시키면 아무런 효과가 없지만 NULL을 증가시키면 1이 됩니다.
즉, 증가/감소 연산 중에 피연산자는 연산 전에 정수로 변환되지 않습니다. 피연산자가 부울 값인 경우 결과가 직접 반환됩니다.
증가/감소 부울 값:
$a = TRUE; var_dump(++$a); // bool(true) $a = TRUE; var_dump(--$a); // bool(true) $b = FALSE; var_dump(++$b); // bool(false) $b = FALSE; var_dump(--$b); // bool(false)
증가/감소 NULL:
$a = NULL; var_dump(++$a); // int(1) $a = NULL; var_dump(--$a); // NULL
문자 변수에 대한 산술 연산을 처리할 때 PHP는 C 대신 Perl의 습관을 따릅니다.
예를 들어 Perl에서
$a = 'Z'; $a++;
는 $a를 'AA'로 바꾸고, C에서
a = 'Z'; a++;
는 a를 '['로 바꿉니다('Z'의 ASCII 값은 90이고 ' [' ASCII 값은 91입니다.)
문자 변수는 증가만 할 수 있고 감소할 수 없으며 순수 문자(a-z 및 A-Z)만 지원합니다.
예:
$a="9D9"; var_dump(++$a); // string(3) "9E0"
그러나 여기에 또 다른 함정이 있습니다.
$a="9E0"; echo ++$a; // 10
위 규칙을 설치한 후 9E1이 출력되어야 하는데 여기서는 10이 출력됩니다. 왜?
이렇게 쓰면 대부분의 사람들이 그 이유를 알 것입니다.
$a = "9E0"; var_dump(++$a); // float(10)
$a의 유형은 부동 소수점입니다. 즉, 9E0은 부동 소수점 수의 과학적 표기법, 즉 9 * 10^0 = 9입니다. 9가 증가하면 결과는 당연히 다음과 같습니다. 10.
참조: 문자열숫자 값으로 변환
이제 질문이 다시 나옵니다.
$l = "Z99"; $l++;
결과는 무엇입니까? 결과는 Perl 언어의 규칙에 따라 "AA00"입니다.
또 다른 참고가 있습니다:
다른 문자 변수의 증가/감소는 유효하지 않으며 원래 문자열은 변경되지 않습니다.
이건 설명하지 않겠습니다.
마지막 참고사항:
$a = '012'; $a++; var_dump($a);
이 결과는 '013'인가요? 13? 11?
이 문단의 결과는 int(13)이고 문자열 '012'는 8진수로 처리되지 않습니다.
$a = 012; // 八进制,十进制为 10 $b = "012"; // 转换为整数为十进制 12
0x로 시작하면 어떻게 되나요?
$a = '0x1A'; $a++; var_dump($a); // int(27)
0으로 시작하는 것은 8진수로 간주되지 않지만, 0x로 시작하는 것은 16진수로 간주됩니다.
在 PHP 官方文档中 Integer 整型 还有另一个八进制陷阱:
var_dump(01090); // 8진수 010 = 10진수 8
설명서에서는 다음과 같이 설명합니다.
Warning 如果向八进制数传递了一个非法数字(即 8 或 9),则后面其余数字会被忽略。
위 내용은 PHP 증감 연산자에 대한 이해와 주의사항의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!