개발 Q&A

제목 foreach 사용할 때 예외처리?
글쓴이 milosz 작성시각 2012/11/16 07:40:42
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 20034   RSS
list 같은 페이지에서 foreach로 내용을 보여줄 때 늘 아래와 같이 처리를 했었습니다.
 
<?php
if( isset($list) === true && gettype($list) === 'array' ):
  foreach( $list as $item ):
?>
  <p><?php $item->name;?></p>
<?php
  endforeach;
endif;
?>
$list가 array가 아닌 경우에는 foreach가 Invalid argument supplied for foreach() 같은 에러를 가져와서..
값이 있는지도 체크하고 타입도 체크하고... 근데 뭔가 지저분한 느낌은 없엘 수가 없어요..;
 
모델 작성시 값이 없으면 빈 array를 리턴하는 형태로 하면 되긴 하지만 그렇게 되면
값이 없는 경우를 체크하는 로직이 복잡해지니까요.

예를 들면

모델에서 목록이 있으면 목록을 리턴하고 결과가 없으면 false를 리턴하게 하면
목록이 없는 경우를 false 체크만 하면 알게 되는데

빈 array로 리턴하면 count()를 써서 빈건지 아닌지를 체크해야 하니
보기에도 너저분하고 서버 자원도 그냥 false 체크하는 것보다 더 쓸테구요.
 
그러다 요즘 나름 덜 귀찮은(?) 방법을 찾아서 아래와 같이 쓰는데요.
<?php
foreach( (array) $list as $item ):
?>
  <p><?php $item->name;?></p>
<?php
endforeach;
?>

type casting으로 에러의 상황을 막아버리는겁니다. 
 
그런데 type의 존재감이 극도로 낮은 php에서 이런 방법을 쓰니 왠지 잘못된 기분도 들고 해서 말이죠.
view페이지 작성시에 귀찮음도 감소하고 복잡도는 낮추는 쪽이지만...
 
그래서 함 같이 얘기해보고 싶어 이렇게 올려봅니다. 이렇게 쓰면 어떤 부분에서 문제가 될 수 있을까요?
 다음글 [초보]모달창 안에서 스크립트사용 (4)
 이전글 이거 속도가 장난이 아니군요. 개선 방법 있을까요? (12)

댓글

변종원(웅파) / 2012/11/16 10:18:35 / 추천 0
모델에서 false가 넘어왔다면 어차피 뷰에서 한번 체크를 해야 합니다.

데이터가 없는 게시판이라면 "데이터가 없습니다." 를 표시하거나
검색 후 결과가 없는 것이라면 "검색결과가 없습니다." 정도 표시를 해줘야 하기 때문에
뷰에서 해당 결과에 따른 분기처리는 해줘야 합니다.

위와 같이 친절하려면 어차피 분기처리를 해야합니다. ^^
규지니 / 2012/11/16 11:34:19 / 추천 0
 is_array() == TRUE 는 안되나요? if가 한번은 들어가야할거 같은데요..