숫자를 문자속성으로 어케 바꾸나요?

숫자를 문자속성으로 어케 바꾸나요?

QA

숫자를 문자속성으로 어케 바꾸나요?

답변 3

본문

$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 "값이 다릅니다.";
}
?>
답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
filter #php ×
전체 15,826
© SIRSOFT
현재 페이지 제일 처음으로