PHP 7.4가 올해를 마지막으로 지원이 종료된다고 해서... (7.4 버전이 7.x 버전대의 마지막 버전이라네요)
오랜만에 날 잡아서 PHP 8.1로 업그레이드를 했는데요.
Fatal 에러들을 얼추 잡고 난 후 디버깅을 돌려보니 7.4에서는 보이지 않았던 워닝들이 무수히 쌓여 있더군요.
워닝들은 주로 서드파티 레이아웃이나 스킨, 모듈에서 나왔고, 거의 대부분이 아래와 같았습니다.
>Warning: Undefined property: stdClass::$변수이름
코드를 열어서 해당 변수가 있는 부분에서 isset() 등을 감싸주거나 조건을 걸어주면 없어지긴 하던데요.
if (isset($변수이름) && $변수이름) { ... }
이런 식으로 해서 지금은 대부분 워닝을 잡긴 했는데 (페이지당 15개 내외)
혹시 더 필요한 부분이나 놓친 부분이 있을까 해서 질문드려 봅니다. (업그레이드 후 체크해야 할 부분 등)
P.S. 에러 잡는 데 참고한 글입니다.
https://xetown.com/tips/1489364
https://xetown.com/questions/1493473
사실 undefined 변수를 쓰는 것 자체가 말도 안되는 것이지만, php가 그동안 허용하다보니 코드들이 엉망이 되었더라구요.
초기에 변수를 선언하는 것이 좋지만, 그럴수 없는 상황이라면 (3rd party, 혹은 손 닿지 않는 부분), 쓰는 쪽에서 아쉬운대로 땜빵하는 수밖에... 코드를 다 찾아가면서 필터링하는 것도 방법이지만, 코드 제일 위쪽(또는 모듈의 php에서) 걸러주는 것이 더 좋을때도 많습니다. 집에 들어온 도둑을 방방마다 문 열어보며 잡을 것인지, 아니면 현관문에서 신분증 검사를 할 것인지의 선택인 셈입니다.
초기 변수 선언할때, $var = new stdClass(); 로 해야하는 경우에는 조심해야 하는데, 간혹 황당하게 if ($var) 처럼 쓰는 경우가 있는데, 이런 경우에는 변수를 선언함으로써 if문이 false에서 true로 바뀌므로, if 문도 같이 바꿔줘야하죠.
그리고, 개발자가 방치한 코드중에 재배포가 허용된 것이라면, 본인이 고친것을 포함해서 재배포 해서 다른 사람들이 혜택을 받게 하는 것이 오픈소스의 취지이고 매너겠죠? ^^