1. 유형 변환 문제
<span style="color: #008080;">intval</span><span style="color: #000000;">(); </span><span style="color: #008080;">var_dump</span>(<span style="color: #008080;">intval</span>('1asdfasd')); <span style="color: #008000;">//</span><span style="color: #008000;">1</span> <span style="color: #008080;">var_dump</span>(<span style="color: #008080;">intval</span>('awqw12')); <span style="color: #008000;">//</span><span style="color: #008000;">0</span> <span style="color: #008080;">var_dump</span>(<span style="color: #008080;">intval</span>(<span style="color: #0000ff;">array</span>())); <span style="color: #008000;">//</span><span style="color: #008000;">0</span> <span style="color: #008080;">var_dump</span>(<span style="color: #008080;">intval</span>(<span style="color: #0000ff;">array</span>('foo','val'))); <span style="color: #008000;">//</span><span style="color: #008000;">1</span> <span style="color: #008080;">var_dump</span>(<span style="color: #008080;">intval</span>(0x1A)); <span style="color: #008000;">//</span><span style="color: #008000;">26 十六进制转换</span> <span style="color: #008080;">var_dump</span>(<span style="color: #008080;">intval</span>('asdfqwer')); <span style="color: #008000;">//</span><span style="color: #008000;">0</span>
intval 변환된 값이 문자열인 경우 오류를 반환하지 않고 0을 반환합니다. 변환된 값이 배열인 경우 두 가지 상황이 있습니다. 변환된 값이 빈 배열인 경우 0을 반환합니다. , 그렇지 않으면 1을 반환합니다
참고: PHP는 32비트 메모리를 사용하여 정수를 저장합니다. 32비트는 4294967296 숫자를 나타낼 수 있습니다. 부호가 있는 경우 -2147483647부터 2147483648까지입니다.
2. 내장 기능의 느슨함 문제
switch(); $i='3adcd'; switch($i){ case 1: echo 'i is 1'; break; case 2: echo 'i is 2'; break; case 3: echo 'i is 3'; break; default: echo 'i is default'; break; }
위의 결과는 스위치 케이스 3에 들어갑니다. 왜 이런 일이 발생합니까? 스위치가 숫자 유형 케이스인 경우 스위치는 매개변수를 int 클래스로 변환하므로 위의 실행 시 $i가 먼저 유형 변환이 수행됩니다. 변환 결과는 3입니다. . .
<span style="color: #008080;">in_array</span><span style="color: #000000;">(); </span><span style="color: #800080;">$arr</span> = [0,1,2,3,'test'<span style="color: #000000;">]; </span><span style="color: #008080;">var_dump</span>(<span style="color: #008080;">in_array</span>('abd',<span style="color: #800080;">$arr</span>)); <span style="color: #008000;">//</span><span style="color: #008000;"> true</span> <span style="color: #008080;">var_dump</span>(<span style="color: #008080;">in_array</span>('1bc',<span style="color: #800080;">$arr</span>)); <span style="color: #008000;">//</span><span style="color: #008000;"> true</span>
위의 실행 결과가 왜 이런 걸까요? 나중에 매뉴얼을 쿼리해 보니 in_array는 기본적으로 값이 같은지 비교만 하고 유형이 같은지는 비교하지 않는 느슨한 비교 방식으로 되어 있다고 공식적으로 나와 있습니다. 값이 동일하므로 위의 내용이 있습니다. 이 결과에 대해서는 in_array 함수의 세 번째 매개변수를 True로 설정하는 것이 엄격한 비교 방법입니다.
위의 사항은 일상적인 개발에서 주의해야 할 모든 사항입니다.