php 퀴즈~ > 자유게시판

자유게시판

php 퀴즈~ 정보

기타 php 퀴즈~

본문

$a=0;

if ($a == 'super-user') {
    echo 'super-user';
} else {
    echo 'normal-user';
}

결과값은 뭘까요.
먼저 생각해 보시고 실행해보세요.

(코웃음치고 있으실 고수님들은 패스~)
추천
0

댓글 14개

(0 == 'super-user') -> TRUE
(1 == 'super-user') -> FALSE

이렇게 나타나는데 PHP 버그 같네요.

비슷하게 'C'로 확인 해 봤더니 모두 FALSE로 나옵니다.
버그라기보다 php의 특징이랄까요..
메뉴얼에 나와있는 내용이에요..

자유로운 형변환을 하는 php에서는 === 을지원하잖아요.
그렇군요.. 값이 있으면 True를 던진다니..
매뉴얼에서 스트링이다, 변수다 다 찾아봐도 몰랐는데, 눈치껏 혹시 그런가 했지만.
그렇군요..
어찌되었거나 말이 안되는 결과가 나옵니다.
저 조건 자체가 일단 말이 안되는 소리니...
대체 무슨 기준으로 if ~ else가 돌아갈 수 있다고 보시나요?
저것이 무슨 jsp랍니까?
농담으로 넘기려고 했더니...
재미있는 반응들을 보이시네요.

뭐 일단 jsp로 돌려본다고 가정해도,
a라는 변수(형)를 적절히 선언해줘야 겠지요.
변수a = (int)어쩌고...

php에 관한 질문 맞죠?!
아닌가요?
어쨌거나 개인적인 입장에서는 명백한 버그라고 보여집니다만,
상기된 구문을 돌려보면, super-user가 출력될 겁니다.
php 구문 맞구요..

php라는 언어의 특성이구요..

http://kr2.php.net/manual/kr/types.comparisons.php
http://kr2.php.net/manual/kr/language.types.type-juggling.php


'대체 무슨 기준으로 if ~ else가 돌아갈 수 있다고 보시나요?'
=> 무슨 의미의 말인지 모르겠습니다.;;
첫단락의 if ~ else 구문에 대해 언급한 것은,
그 자체로는 조건(문)을 비교해서 결과값을 출력하라는
극히 단순하게 구성된 이상하지 않은 구문으로 보일수도 있습니다.
그러나, 전체적으로 볼때 논리에 맞지 않는 형식이지요.

상당히 이상하게 들리는 표현이 될 수도 있겠지만,
상기된 구문에 다음과 비슷할거라 여겨집니다.

=======================================
내가 만약 '신'이라면,
"난 신이야!"
그렇지 않다면,
"난 평범한 인간이야!"
=======================================
이 부분에서 '신'이라는 조건이 신적존재인 God를 지칭하는지,
단순히 '신(이름)'을 지칭하는지,
아니면 단순히 수(숫자)를 뜻하거나, 량(갯수 또는 질량)을
지칭하는지 알 수가 없다는 겁니다.


말 자체로는 이상치 않아 보일지 몰라도,
과연 상기한 형식이 논리에 맞는 표현일까요?
그래서 if ~ else가 돌아갈 수 없다고 본 것입니다.
명백한 버그죠.

그리고, '해뜰녘'님께서는 상기된 구문과 독특한(?!) 출력결과가
php라는 스크립트 언어의 특징임을 명시하고,
관련 매뉴얼을 보여주시지만,
우리가 흔히 생각할 수 있는 사고(방식)로 개발된 언어가 아니고,
억지스런 논리도 적용될 수 있도록 만들어 졌기 때문에,
더더욱 논리적인 오류(버그)로 느껴집니다.

도저히 납득할 수 없는 가정이며,
납득할 수 없는 그 가정에 따른 결과 산출이라고 보여진다는 의미일 뿐입니다.
물론 제 생각자체가 일반적인 통념에 어긋나는 부분일 수도 있겠으나,
한정되지 않은 대상을 마치 한정된 대상처럼 비교할 수 있다는
php의 논리오류(BUG, 버그)라고 봅니다.
프로그래밍을 처음 배우는 사람들은 '같다' 라는 의미를 가진 = 표시가  대입의 의미로 쓰이는 것때문에 헷갈려 하기도 합니다. 비교를 위해 ==를 따로 마련해 뒀죠. 이것 역시 통념에 어긋나는 부분이니 버그일까요..

php에서는 형변환에 가급적이면 신경쓰지 않도록 == 연산자와 기존의 엄격한 형변환을 위한 === 연산자를 마련해 뒀습니다. 즉, 언어적인 특성입니다.

밥그릇에는 꼭 하얀 쌀밥만 담아야 하는 언어와 일단 아무것이나 담고 필요에 의해 변환하는 언어..
둘다 제각각의 장단점이 있습니다.
재미있는 비유를 사용하셨습니다.
꼭 하얀 쌀밥만을 담아야하는 스크립트언어라면
jsp를 지칭하시는 것일테고,
필요에 의해 변환이 가능한 스크립트언어는
당연히 php를 지칭하시는 것이라고 보입니다.

'해뜰녘'님의 본 php퀴즈는,
어느정도 이해는 가지만,
(고정적인 관념 때문이기도 하겠지만...)
결코 수긍할 수는 없는 부분이기도 합니다.

탄력적인 형변환이 가능하다는 것으로 인해,
편의성이 부각되었다는 측면은 이해가 가지만,
그 편의성으로 인해 '논리적인 비교' 자체가
애매모호하게 되는 것 같습니다.
아무튼 php에서는

== 는 느슨한 비교입니다. php 가 마련한 규칙에 의해 필요하면 형변환을 해서 비교를 합니다.
비교를 하기위해 일일이 문자형, 정수형, 실수형, 논리값 등등으로 변환해야 하는 수고를 없애줍니다.

=== 은 엄격한 비교입니다. 형변환을 하는 것이 아니라 자료형까지 비교해서 결과를 보여줍니다.
즉, 문자열과 정수형을 비교한다면 false 가 반환 되겠죠.

암튼 변수와 비교연산자를  사용함에 있어서 주의할 점이다라는 환기를 시키는 의미의 글로 받아들이시기 바라구요..
전체 10 |RSS
자유게시판 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT