숫자를 문자속성으로 어케 바꾸나요?
본문
$aaa 의 값이 0123 이구요
$bbb 의 값이 123 입니다.
이걸 조건식으로 비교할때.. 변수속성이 숫자라면 같게인식하고 문자속성이라면 다르게 인식되지 않나요?
저는 이걸 문자로 인식해서 다른걸로 인식해야 합니다.
그래서
$aaa = strval($aaa );
$bbb = strval($bbb );
요로콤 하면 될줄 알았는데....
if($aaa == $bbb) 는 같다고만 나오네요...ㅠㅠㅠ
문자로 인식시킬려면 어케 해야 하나요?
답변 3
두 변수의 값을 문자로 강제 변환한 후,
단순 동등 연산자(==) 대신 엄격한 동일 연산자(===)를 사용하면
PHP에서 숫자형으로 인식되는 '자동 형 변환'을 방지할 수 있습니다.
즉, $aaa와 $bbb를 strval()로 문자열로 변환한 뒤 if($aaa === $bbb) 조건문을 사용하면
"0123"과 "123"이 서로 다른 문자열로 비교되어 올바른 결과를 얻을 수 있지 않나? 싶습니다.
$aaa = strval($aaa);
$bbb = strval($bbb);
if ($aaa === $bbb) {
// 두 문자열이 동일할 때의 처리
} else {
// 두 문자열이 다를 때의 처리
}
★붙임) PHP가 동적이여서, 변수의 데이터 타입을 선언하지 않아도
상황에 따라 자동 타입 변환('자동 형 변환', '형 요리')됨을 염두하셔야~
. . .
첫째 염두; 비교 연산자로 ==를 사용한 경우
PHP는 두 문자열이 모두 숫자형 문자열일 때 내부적으로 숫자로 변환하여 비교하므로
"0123"과 "123"이 동일(둘 다 123)하다고 판단합니다.
둘째 염두; 만약 $aaa와 $bbb가 숫자 리터럴(예: $aaa = 0123;)로 초기화되었다면,
PHP는 0123을 8진수로 해석하여 실제 저장 값이 83이 됩니다.
이 경우 strval($aaa)는 "83"이 되어 원래 의도한 "0123"과 다르게 변환됩니다.
따라서 원하는 결과를 얻으시려면,
비교에 사용되는 값들을 숫자 리터럴이 아닌 문자열 리터럴
- 예시: $aaa = "0123"; $bbb = "123";
로 선언하고, 반드시 엄격 비교(===)를 사용하여야 합니다.
== 연산자로 비교해도 다르게 인식하네요.
$aaa = 0123;
var_dump($aaa); // int(83)
$bbb = 123;
var_dump($bbb); // int(123)
var_dump($aaa == $bbb); // bool(false)
var_dump($aaa === $bbb); // bool(false)
<?php
$aaa = '0123';
$bbb = '123';
$aaa = strval($aaa);
$bbb = strval($bbb);
if ($aaa === $bbb) {
echo "값이 같습니다.";
} else {
echo "값이 다릅니다.";
}
?>