Parameter must be an array or an object that implements Countable 문의
CMS/프레임워크 | Rhymix 1.9 |
---|---|
개발 언어 | PHP 7.2 |
widgets/newest_comment/newest_comment.class.php:61
if($args->mid_list) {
$mid_list = explode(",",$args->mid_list);
if(count($mid_list)) {
$module_srls = $oModuleModel->getModuleSrlByMid($mid_list);
if(count($module_srls)) $args->module_srls = implode(',',$module_srls);
else $args->module_srls = null;
}
}
중략....
if(count($mid_list)==1) $widget_info->module_name = $mid_list[0]; // 61번 라인입니다.
너무 다양한 에러가 발생하고 있어 질문이 많아질 것 같아 죄송합니다.
댓글 3
그래야 $widget_info->module_name 이런식으로 변수를 넣을수 있죠
$widget_info 변수 초기화가 없거나 가져온 값이 없거나 그런듯?
if(count($변수)) 문법에서 워닝이 발생하는 것은 $변수에 배열이 아닌 엉뚱한 것을 넣었기 때문입니다.
예전에는 아무 거나 던져줘도 다 세어줬지만, PHP 7.2 이상은 배열이거나 특수한 Countable 클래스여야만 합니다.
일반적인 XE 서드파티 자료 기준, 구체적인 원인은
70% 변수가 비어 있는 경우 (널값, false, 빈 문자열 등)
30% 비어 있지는 않은데, 배열이 아닌 것이 들어 있는 경우 (오브젝트, 숫자 등)
정도로 나눌 수 있습니다.
위의 코드는 어떤 경우인지 알 수 없지만, 일단 70%의 가능성을 제거하기 위해
if(count($변수))
if(count($변수) == 1)
라고 되어 있는 부분을
if($변수 && count($변수))
if($변수 && count($변수) == 1)
로 바꿔보시기 바랍니다.
변수가 비어 있으면 앞의 조건에 걸리니까, count는 체크할 필요도 없겠지요.
단, if(!count($변수)) 또는 if(count($변수) == 0) 이런 식으로
배열이 비어 있는지 체크하는 코드라면 위와 같은 트릭을 사용할 수 없겠지요?
그럴 때는 if(is_array($변수) && count($변수) == 0) 이렇게
배열인지 아닌지 체크하는 것이 좀더 정확합니다.
if($mid_list && count($mid_list)==1) $widget_info->module_name = $mid_list[0];
요렇게 고쳐 놓고 모니터링 해보겠습니다. 위젯들이 캐시 때문에 바로 확인이 안되네요.
모니터링 해봤는데 이제 워닝 메시지 안뜨네요.