한 학생이 질문했습니다.
코드 복사 코드는 다음과 같습니다.
for ($i = 'A'; $i <= 'Z'; $i ) {
echo $i;
}
//출력은 무엇입니까?
코드 복사 코드는 다음과 같습니다.
ABCDEFGHIJKLMNOPQRSTUVWXYZAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARAS…
왜요?
코드 복사 코드는 다음과 같습니다.
PHP는 C가 아닌 문자 변수에 대한 산술 연산을 처리할 때 Perl의 규칙을 따릅니다. 예를 들어 Perl 'Z' 1에서는 'AA'로 바뀌고, C 'Z' 1에서는 '[' ( ord('Z') == 90, ord('[') == 91 )로 바뀌지만 문자 변수는 증가할 수 있지만 감소할 수는 없습니다. 그럼에도 불구하고 일반 ASCII 문자(a-z 및 A-Z)만 지원됩니다.
문자 변수에 대한 산술 연산을 처리할 때 PHP는 C 대신 Perl의 습관을 따릅니다. 예를 들어, Perl에서 'Z' 1은 'AA'를 얻고, C에서는 'Z' 1은 '[' (ord('Z') == 90, ord('[') == 91) 을 얻습니다. 문자 변수는 증가만 가능하고 감소는 불가능하며 순수 문자(a-z 및 A-Z)만 지원됩니다.
코드 복사 코드는 다음과 같습니다.
$name = "laruence"; $name; //"laruencf"입니다
코드 복사 코드는 다음과 같습니다.
$name = "laruence";--$name; //효과 없음, 여전히 "laruence"
그래서 이 문제의 원인은 다음과 같습니다. $i = Z 일 때 $i는 AA가 되고, 문자열을 비교하면