질문/조언질답게시판
Extra Form
PHP PHP 7.4
CMS Rhymix 2.x

원래 count() 함수에서 파라미터가 null 이거나 

단순 숫자이거나 한 경우에는 전에는 warning이 떠서

그냥저냥 별 문제 없이 쓸 수 있었는데

php 8.0 부터 error가 뜨고 있어서 모듈들의

호환성이 크게 저하된 것 같습니다.

아마 이 문제에 대응하기 위해 라이믹스에도

countobj()라는 대체함수가 준비되어 있지만

이 함수를 사용치 않는 기존의 모듈들에는 

효과가 없을뿐더러 이 함수를 쓰게 되면 되려

XE 과거버젼과의 호환성 문제가 생기는 것 같습니다.

 

그래서 이리저리 방법을 생각해본 것인데

function alias를 쓰면 어떨까요?

 

use function countobj as count;

 

이렇게 해서 기존의 count 함수를

강제로 countobj로 대체시켰더니

별 문제 없이 동작하는 것 같습니다.

이게 시스템 함수에도 먹을까했는데

먹는거 같더군요...

 

한번 고려해봐주셨으면 합니다.

  • profile
    아무래도 PHP7.2 이상부터 성능이라던지 이런 여러가지 부분에서 호환성 및 OOP스러운 코딩방법으로 발전하기 위해서 미리 경고했던 사항들이 8.0에서 대거 많이 제한 되었던 것 같아요.
    이러한 부분에서 저는 오히려 대체 함수를 사용하기보단 PHP가 가고자 하던 부분을 명확하게 잡아주는것이 좀 더 낫다고 생각합니다.

    언제까지 기존 자료들의 코드베이스를 계속 지원할 수 없고 과거 자료도 최신에서 문제가 발생될 정도라면 그 만큼 유지보수라던가 이런 부분을 신경쓰지 않고 있다는 반증을 하는 샘입니다.

    물론 그런 자료가 꼭필요해서 쓰셔야 하는 사람들의 경우라면 좀 안타까운 것도 있지만 object를 count에 넣는다던가 null을 count에 넣는다는가 하는 것들을 사실 대처할 수 있는 방향이 많이 있습니다.

    라이믹스에서는 해당 방법으로 모든 count를 countobj로 만들지 않을 것 같고요. 해당 오류가 뜨는 항목을 원래 목적에 맞게 데이터를 잘 넣는것이 좋다고 생각합니다.
  • profile

    참신한 아이디어로군요.^^

     

    그러나 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은 일종의 당근입니다. 그 당근을 먹으려면 코드 정리 작업이 필요합니다. 귀찮으면 안 먹으면 그만입니다. 그러나 안 먹는다고 굶어죽는 것도 아니니 굳이 떠먹여 주지는 않겠습니다.

  • profile

    어떤것을 써도 좋으니 "하위 호환성" 만큼만은 최후까지 지켜줬으면 합니다. 웹 관리자들이 항상 최신버전에 관심가질수 있는 것도 아니고, 몇년 다른일 바빠 신경 못쓰다가 돌아와보면 새 버전으로 업그레이드 어려운 상황이 오면 참 난감해서리... 앞만보고 달리기도 벅찬게 요즘 세상이기는 하지만, 가끔 뒤도 좀 돌아봐서 다른 사람들도 잘 따라오는지도 좀 확인을 부탁드립니다~. 너무 뛰다보면 캄캄한 산중에 XE3 같은 괴물과만 단둘이 서있게 되는 상황이 올수도 있으니까요(아 그쪽 관련분들께는 죄송... 하지만 솔직히 안타까워 하는 말입니다).

  • profile profile
    저희가 직접 호환성을 깨는 것이라면 뒤를 돌아보며 하위 호환에 잘따라오는지 봐드릴 수 있지만 php8.0의 경우 리이믹스와는 무관하게 언어자체에서 호환성을 깨는 행동입니다. 이미 7.2버전부터 우리 이거 에러날거야 에러날거야 하며 경고줬던것을 운영진의 개인사정으로 몇년간 방치하고 업데이트 하신걸 그 외국인들이 신경써줄 이유는 없죠..

    그들도 일부 부분은 5.4버전부터 필요한거라고 강요해오던걸 막는건데요... 그럼 최소 3년 4년은 봐준것이고 그쪽에서 이제 시행하는것에 있어서는 아무런 잘못이 없다 생각합니다.

    라이믹스도 비슷하고요.

    php나 라이믹스나 한사람을 위해서 나온게 아니라서 그 소스를 계속 기다려 드리기에도 무리가 있죠. 기술의 발전속도도 빠르고요 ㅎㅎ

    저희도 최대한 많이 봐드릴려고 노력하고 있으나 언어자체적인 문제는 저희도 뒤를 봐드리기엔 어려울 것 같아요.

    몇몇분들때문에 기술발전을 뒤쳐지는것도 이상한 것 같고요..(그정도면 거의 해킹을 당하더라도 안억울해야할 정도이죠..)