>  기사  >  백엔드 개발  >  PHP 증감 연산자에 대한 이해와 주의사항

PHP 증감 연산자에 대한 이해와 주의사항

伊谢尔伦
伊谢尔伦원래의
2017-06-21 15:31:223555검색

증분 감소 연산자

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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