PHP 8.0 에서 count() 문제 해결
CMS/프레임워크 | Rhymix 2.0 |
---|---|
개발 언어 | PHP 7.4 |
원래 count() 함수에서 파라미터가 null 이거나
단순 숫자이거나 한 경우에는 전에는 warning이 떠서
그냥저냥 별 문제 없이 쓸 수 있었는데
php 8.0 부터 error가 뜨고 있어서 모듈들의
호환성이 크게 저하된 것 같습니다.
아마 이 문제에 대응하기 위해 라이믹스에도
countobj()라는 대체함수가 준비되어 있지만
이 함수를 사용치 않는 기존의 모듈들에는
효과가 없을뿐더러 이 함수를 쓰게 되면 되려
XE 과거버젼과의 호환성 문제가 생기는 것 같습니다.
그래서 이리저리 방법을 생각해본 것인데
function alias를 쓰면 어떨까요?
use function countobj as count;
이렇게 해서 기존의 count 함수를
강제로 countobj로 대체시켰더니
별 문제 없이 동작하는 것 같습니다.
이게 시스템 함수에도 먹을까했는데
먹는거 같더군요...
한번 고려해봐주셨으면 합니다.
댓글 4
이러한 부분에서 저는 오히려 대체 함수를 사용하기보단 PHP가 가고자 하던 부분을 명확하게 잡아주는것이 좀 더 낫다고 생각합니다.
언제까지 기존 자료들의 코드베이스를 계속 지원할 수 없고 과거 자료도 최신에서 문제가 발생될 정도라면 그 만큼 유지보수라던가 이런 부분을 신경쓰지 않고 있다는 반증을 하는 샘입니다.
물론 그런 자료가 꼭필요해서 쓰셔야 하는 사람들의 경우라면 좀 안타까운 것도 있지만 object를 count에 넣는다던가 null을 count에 넣는다는가 하는 것들을 사실 대처할 수 있는 방향이 많이 있습니다.
라이믹스에서는 해당 방법으로 모든 count를 countobj로 만들지 않을 것 같고요. 해당 오류가 뜨는 항목을 원래 목적에 맞게 데이터를 잘 넣는것이 좋다고 생각합니다.
참신한 아이디어로군요.^^
그러나 countobj() 함수는 어디까지나 땜빵이지, 사용을 권장하는 함수가 아닙니다. 배열이 아닌 것을 count() 하려고 하는 자료가 있다면 countobj() 를 사용하지 않고도 정상 작동하도록 수정하는 것이 정석입니다. 코어에서도 PHP 7.4 시절에 워닝을 줄이기 위해 임시로 만든 함수를 PHP 8.0까지 달고 다니는 중이라, countobj() 에 의존하는 코드는 점차 들어낼 것입니다. 특히 오브젝트에 사용하면 성능이 꽤 나빠집니다.
땜빵하기 쉬우라고 또다른 땜빵을 제공할 생각은 없습니다. 그렇게 쓰다가 나중에 PHP 8.x 버전대에서 "내장함수는 alias로 덮어쓸 수 없다"라고 해버릴지도 모르니..... 처음부터 제대로 된 코드를 작성하도록 강력하게 유도해야 뒤탈이 나지 않을 것 같습니다.
count()를 잘못 쓰는 자료가 꼭 필요하다면 PHP 7.4에 머물면 되니, 코어 개발팀이 2차 땜빵을 거절함으로써 사이트 운영에 특별히 지장이 있는 것도 아닙니다. 우분투 20.04를 비롯한 데비안 계열 OS들이 꽤 오랫동안 PHP 7.4를 지원할 예정이므로 보안패치 걱정도 없습니다. PHP 8.0은 일종의 당근입니다. 그 당근을 먹으려면 코드 정리 작업이 필요합니다. 귀찮으면 안 먹으면 그만입니다. 그러나 안 먹는다고 굶어죽는 것도 아니니 굳이 떠먹여 주지는 않겠습니다.
어떤것을 써도 좋으니 "하위 호환성" 만큼만은 최후까지 지켜줬으면 합니다. 웹 관리자들이 항상 최신버전에 관심가질수 있는 것도 아니고, 몇년 다른일 바빠 신경 못쓰다가 돌아와보면 새 버전으로 업그레이드 어려운 상황이 오면 참 난감해서리... 앞만보고 달리기도 벅찬게 요즘 세상이기는 하지만, 가끔 뒤도 좀 돌아봐서 다른 사람들도 잘 따라오는지도 좀 확인을 부탁드립니다~. 너무 뛰다보면 캄캄한 산중에 XE3 같은 괴물과만 단둘이 서있게 되는 상황이 올수도 있으니까요(아 그쪽 관련분들께는 죄송... 하지만 솔직히 안타까워 하는 말입니다).
그들도 일부 부분은 5.4버전부터 필요한거라고 강요해오던걸 막는건데요... 그럼 최소 3년 4년은 봐준것이고 그쪽에서 이제 시행하는것에 있어서는 아무런 잘못이 없다 생각합니다.
라이믹스도 비슷하고요.
php나 라이믹스나 한사람을 위해서 나온게 아니라서 그 소스를 계속 기다려 드리기에도 무리가 있죠. 기술의 발전속도도 빠르고요 ㅎㅎ
저희도 최대한 많이 봐드릴려고 노력하고 있으나 언어자체적인 문제는 저희도 뒤를 봐드리기엔 어려울 것 같아요.
몇몇분들때문에 기술발전을 뒤쳐지는것도 이상한 것 같고요..(그정도면 거의 해킹을 당하더라도 안억울해야할 정도이죠..)