CI 묻고 답하기

제목 input->post()로 받는 값에 문자열로 0을 넣으면 false를...
글쓴이 kimsy 작성시각 2012/06/25 21:28:52
댓글 : 6 추천 : 0 스크랩 : 0 조회수 : 15844   RSS
if( $value = $this->input->post('value'))

요런 코드인데,
value라는 값에 다른 문자열 다 괜찮은데, 문자열로 0이 넣어져서 오면 false를 반환하는군요...


버그일까요?

다른 방법을 쓰긴 했지만 찝찝해서 여쭤봅니다

감사합니다!
 다음글 CSS나 js파일 어떻게 관리하세요? (6)
 이전글 위지윅에디터 사용시 ..html 손실 문제.. (2)

댓글

변종원(웅파) / 2012/06/25 21:54:32 / 추천 0
조건문에서 위 구문은 값이 있고 없고를 체크할 때 사용하면 안됩니다.
if( 0 ) 과 같은 상황인데 false가 안나오면 더 이상한거 아닌가요?

값이 있는지 체크하려면 if( $value === '' ) 정도로 바꾸시는게 좋을 것 같네요.
lyx / 2012/06/26 00:09:15 / 추천 0
조건문이 아닌 대입문을 써버리셨네요 ㅠ
kimsy / 2012/06/26 10:56:54 / 추천 0
웅파님 말씀대로네요
다른언어에서 0과 "0"은 다르지만 웹언어에서는 인자가 모두 스트링으로 넘어오는 이상 저렇게 처리되는게 맞는 것 같네요.

lyx님:저 구문은 $this->input->post('value')에서 리턴하는 값이 $value에 넣어진 후에 if에서 $value에 들어있는 값을 평가하는 코드입니다^_^
kaido / 2012/06/26 17:38:24 / 추천 0
 php의 이상한 특징 이라고 생각 하고있습니다. 
어딘가에 설정 하는게 있는지도 모르겠지만 말이죠?

0 과 flase 와 null 과 빈값은 전부 다른 값입니다.

그런데 php는 사실상 동일하게 보고있습니다.

C 할때는
-1 = false
0 = read or null
1 = true

정해진건 아니지만 대충 이런 느낌으로 숫자를 상태값으로 사용했는데

php 에는 0 값을 가지고 판단 해서는 안되겠더군요.
그래서 가급적이면 0 을 가지고 조건문을 안걸며 true false 로만 하고있습니다.

숫자도 가급적 문자화 해서 처리 하고있어요. 

milosz / 2012/06/26 19:05:18 / 추천 0
 이게 양날의 검이라... 제네릭이 있다면 번거로운 필터링이 따로 없어도 될텐데 이런게 좀 약합니다.
===, gettype 등을 활용해서 꼼꼼하게 걸러주는 방법밖에 없는 것 같네요.
닥스훈트 / 2012/06/28 19:36:12 / 추천 0
if($value == 식) 뭐 이런식으로 일단 해야 되겠는데요