오늘 그룹에서 논의된 문제를 녹음해 주세요.
문제의 원인은
var_dump(md5('240610708') == md5('QNKCDZO')) //true
두 개의 md5 문자열을 사용하세요. 비교 연산자(==)는 같은 것으로 판명됩니다.
다음 두 값이 출력됩니다:
md5('240610708') //0e462097431906509019562988736854
md5('QNKCDZO') //0e83040045199349405802 4219 903391
결과를 보면, 아니요. 언뜻 보면 intval인 것 같아서 0 == 0이 true를 반환했습니다.
나중에 확인해보니 그렇지 않았습니다.
php 비교 연산자:
http://php.net/manual/zh/언어.operators.comparison.php
예:
如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行。此规则也适用于 switch 语句。当用 === 或 !== 进行比较时则不进行类型转换,因为此时类型和数值都要比对。
<?php var_dump(0 == "a"); // 0 == 0 -> true var_dump("1" == "01"); // 1 == 1 -> true var_dump("10" == "1e1"); // 10 == 10 -> true var_dump(100 == "1e2"); // 100 == 100 -> true switch ("a") { case 0: echo "0"; break; case "a": // never reached because "a" is already matched with 0 echo "a"; break; } ?>
위 내용은 PHP에 약한 타이핑의 작은 함정을 소개했으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.