Q&A

PHP8 이상에서 cond="$module_info->module == 'board'" 이 부분 문제라고 뜨지 않나요?

2023.07.17 02:47
214
0
CMS/프레임워크 Rhymix 2.1
개발 언어 PHP 8.0

<a href="{getUrl('act', 'dispBoardAdminBoardInfo')}" data-menu="boardConfig" cond="$module_info->module == 'board'">게시판 설정</a>

 

Warning: Undefined property: stdClass::$module_info

 

이렇게 뜨는데요, 이 부분은 어떻게 고치나요?

보통 $layout_info->, $module_info->, $widget_info->

스킨 상에서 다 이렇게 쓸텐데요..

 

php8에서는 저걸 warning으로 띄우는거 같은데요.

 

{@

$module_info = new stdClass();

}

모듈은 이렇게

 

{@

$layout_info = new stdClass();

}

레이아웃은 이렇게

 

{@

$widget_info = new stdClass();

}

위젯 스킨은 이렇게 미리 선언을 해놔야 하나요?

eond Lv. 12

댓글 10

  • 2023.07.17 02:50 #1775708

    템플릿에서 선언하면 곤란하죠. 일반적인 화면이라면 코어에서 $module_info, $layout_info 등을 미리 넣어뒀을 텐데, 새로 선언하면 덮어씌워지니까요. mid가 없는 관리자 화면이거나, 뭔가 좀 특수한 상황에서만 에러가 나는 것입니다.

     

    $module_info = $module_info ?? new stdClass();

    이렇게 조건부로 선언할 수도 있겠고,

     

    cond="isset($module_info->module) && $module_info->module === 'board'"

    이렇게 변수가 존재하지 않으면 비교하지 않도록 방어할 수도 있습니다.

  • 2023.07.17 02:56 #1775714
    2번은 해당 조건문마다 달려니 너무 많아서
    알려주신 1번 방법으로 한번 해보겠습니다. 감사합니다.
  • 2023.07.17 03:05 #1775718
    ->module까지 체크하네요(__);
    번거롭겠지만 일일이 2번까지 달아놔야할거 같네요.
  • 2023.07.17 03:24 #1775724

    ($module_info->module ?? '') === 'board'
    축약할 수도 있습니다.

     

    아무튼 실제 작동에는 영향 없는 워닝입니다.

  • 2023.07.17 03:49 #1775730
    php 8.0 사용하시니 nullsafe operator를 사용해도 되겠네요.
    https://www.php.net/manual/en/language.oop5.basic.php#language.oop5.basic.nullsafe
  • 2023.07.17 05:10 #1775741
    자급자족 하는 용도면 nullsafe가 좋죠. 그런데 배포하는 용도면 앞으로 10년은 지나야 생각해 볼수 있는 방법이라…
  • 2023.07.17 06:39 #1775747
    맨위에 환경 정보에 8.0이라고 써놓으셔서 거기에 가능한 방법을 적어놨을 뿐입니다.
  • 2023.07.17 09:32 #1775754

    한 가지 덧붙이자면, nullsafe는 "Warning: Undefined variable" 에러는 막지 않습니다.

  • 2023.07.17 13:43 #1775813
    네. 질문 내용은 Undefined property 이니까요.
  • 2023.07.17 14:13 #1775828
    네, 하지만 질문자가 궁극적으로 모든 Warning이 제거되길 바라는 것 같아 보여서요.