테스트 사이트 - 개발 중인 베타 버전입니다

1시간동안의 삽질..

· 2년 전 · 1376 · 9

게시판 커스텀 중에 

원인을 알 수 없는 오류가 발생해서....1시간 동안 삽질을 한 결과

 

$id =0;

if($id == 'delete') {

echo '참'

}

이게 참이 되네요.....

$id === 'delete' 로 해결하긴 했지만,

참이 되는 이유를 검색을 해봐도 알 수가 없습니다. 

궁금해서 날 새겠네요;

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 9개

<?php
$id =0;
var_dump($id == 'delete'); // bool(false)
@sinbi 지금..아주아주 궁금해 죽을 지경입니다.
$id = 0;
if($id == 'agsgs') {
echo '참입니다.'
}
php 7.4 버전 사용 중인데 $id 에 어떤 문자열을 비교해도 참이 나오네요;;
http://quiz.wwiz.kr/board/notice
@메이드 php언어 자체의 버그같네요.
http://phptester.net/ 에서 테스트해보니, php 8.0부터 false로 처리되고, 그 이전버전은 true로 처리되네요.
@sinbi 그렇군요. 아직은 8.0 사용환경이 많지 않으니,, 신경써야 할 부분이 더 늘었네요;;
궁금증이 풀렸습니다. 감사합니다.
동적언어(PHP, JavaScript등) 에서 묵시적 형변환에 따른 결과입니다.

묵시적 형변환은 언어마다 버전마다 조금씩 케이스가 다르기 때문에, 언어스펙을 꼭 확인을 하셔야 합니다.

묵시적 형변환 때문에 동적언어에서는 오류가 발생하는경우가 많고, 동적언어에서 작성된 어플케이션의 경우는 그냥 종료되기도 합니다.(예를 들어 nodejs 로 만든 앱)

개발툴에서 해당 문제점에 대해 경고를 출력하도록 해두면, 좀더 안전한 코드를 작성할수 있습니다.
@솔그루 그렇다고 하더라도 해당 오류는 php 언어 상의 버그라고 생각하는 게 맞는 것 같습니다. 묵시적형변환이 이루어졌다고 하더라도 0 == 'abcd' true 는 언어 자체의 오류라고 보아야 하지 않을까 싶습니다. 코드를 좀 더 꼼꼼하게 써야하지 싶네요.
php의 놀라운 부분이죠.
var_dump((int)'jshshsh');

오래전부터 알려진 문제이고 많은 사람들이 지적해왔지만 “기능”이라는 이유로 이것을 고친다면 호환성 문제가 생기므로 바꾸지 않았죠.

이건 PHP 8에 와서야 고쳐졌습니다.
https://www.php.net/manual/en/migration80.incompatible.php

== 연산자는 없다고 생각하세요.
2년 전
보기만 해도 머리 지나네요
좋은 정보네요.감사합니다.

게시글 목록

번호 제목
1717652
1717651
1717650
1717648
1717635
1717629
1717626
1717625
1717621
1717619
1717611
1717610
1717609
1717607
1717601
1717598
1717591
1717590
1717583
1717575
1717572
1717568
1717566
1717549
1717545
1717533
1717512
1717511
1717508
1717495