https://xe1.xpressengine.com/devlog/23249915

 

'Object' 클래스의 이름을 'BaseObject' 클래스로 이름을 변경합니다.

XE 1의 주요 클래스 중 하나이고 여러 곳에서 사용 중인 'Object' 클래스가 있습니다.
모든 모듈이 이를 상속받아 사용하고 있으며, 그 외에도 다른 용도로도 광범위하게 사용하고 있습니다.

하지만, PHP 7.2부터 'Object'라는 키워드는 클래스의 이름으로 사용할 수 없게 되었습니다.
Fatal error를 발생시키며, PHP 7.2부터는 XE 1.x가 동작할 수 없게 됩니다.

 

PHP 7.2에서도 동작할 수 있도록 XE에서 변경할 수 밖에 없는 부분입니다.
이 문제의 해결을 위해 'Object' 클래스의 이름을 'BaseObject'로 변경하는 것을 결정했습니다.
'BaseObject'로 이름을 변경한... PHP 7.2의 호환성 문제를 해결하는 버전은 XE 1.9.0 버전으로 배포할 예정입니다.

 

XE 1 배포본에서는 해결이 되지만 모듈 등의 확장 기능에서도 이러한 변경을 반영해주어야 합니다.
확장 기능을 배포 하시거나 개발하여 사용하시는 분들은 xe-core/2181 이슈를 참고하여 변경에 대응하실 수 있습니다.

확장 기능에서 이러한 대응을 하지 않으면 PHP 7.2 이상의 환경에서 해당 확장 기능을 이용할 수 없으며,
사이트 동작이 중단될 수 있습니다. PHP 7.2 서버에서는 이 변경사항이 반영되지 않은 확장 기능 사용에 주의하시기 바랍니다.

  • profile

    Object 클래스를 아예 없애는 것은 아닙니다. PHP 버전에 따라 최대한 광범위하게 지원할 예정이므로, XE를 다음 버전으로 업데이트하시더라도 PHP 7.1 이하 버전의 서버라면 Object 클래스를 그대로 사용할 수 있습니다.

     

      PHP 7.1 이하 PHP 7.2 이상
    XE 1.8 이하 Object 에러
    XE 1.9 이상 Object, BaseObject 둘 다 지원 BaseObject

     

    따라서 PHP 7.2로 업그레이드하지 않으신다면 기존에 Object로 코딩되어 있는 모듈을 수정하실 필요는 없습니다. XE 1.9가 나오더라도 눈에 띄는 변화가 없을 테니 그냥 업데이트하시면 될 거예요.

     

    모듈을 개발하시는 분들 입장에서는 녹색으로 표시된 조합만 신경쓰시면 됩니다. 빨간색 조합은 애초에 코어가 작동하지 않을 테니까요. 그래서 깃허브 링크에 나오는 것처럼 BaseObject 클래스가 존재하는지 (또는 PHP 버전이 7.2 이상인지) 확인하여 클래스명을 선택해 주셔야 합니다. BNU님과 함께 여러 방안을 의논해 보았으나 호환성을 유지하는 방법이 그것밖에 없겠더라고요.

     

    물론 현실은... PHP 7.1에서도 에러를 뿜는 모듈이 널려있죠 ㅎㅎ

     

    라이믹스는 XE 1.9와 최대한 호환성을 유지하면서 추가로 몇 가지 권장사항을 발표할 예정입니다.

  • profile profile
    낮에 소식을 보고 코알못이 상상을 해봤습니다. 이런 상황이 벌어질 경우 코어에서 새로운 변경된 것으로 자동 보정해 주면 얼마나 좋을까 하는... 많은 서드파티 개발자들은 대부분 일정기간 후 떠나 업데이트가 안되는 상황이니까요.

    별도 프로그램을 다운받아 실행해서 특정폴더의 파일들에서 변경할 내용을 찾아 알려주거나 혹은 웹상에 업로드해서 동일한 작업을 해주면 좋을텐데 라는 상상도 해봤습니다.
  • profile profile
    클래스명을 일괄 변경하는 것처럼 기계적인 작업이라면 자동화할 수도 있겠지요. 문제는 7.2를 생각하기 전에 먼저 7.1부터 대응해야 하는데, 7.1에서 에러나는 것들은 일괄 변경이 어렵다는 점입니다...
  • profile profile
    다른 어려운 것은 못하더라도 이런 규칙적인 변경이 불가피할 경우는 뭔가 툴이 제공되면 정말 좋을 것 같습니다.
  • profile profile

    변경 방법 검색하다가 이글까지 보게 되었습니다.

    위에 알려주신대로 타임라인 모듈을 수정하려고 하는데 헷갈려서 문의 드립니다.
    1,2번은 확실히 바꿔야하는걸 검색해서 알게 되었는데 3번의 경우도 바꾸면 되는지 궁금합니다.

    1. return new Object(); -> return new BaseObject();

    2. return new Object(-1, 'msg_timeline_no_module_srl');
    -> return new BaseObject(-1, 'msg_timeline_no_module_srl');

    3. @return object -> @return Baseobject

  • profile profile
    3번은 코드가 아니라 주석이므로 바꾸든 안 바꾸든 작동에 영향을 주지 않습니다.
    찾아 바꾸기 할 때 굳이 저것만 빼고 바꾸시려면 더 귀찮을 것 같네요.
  • profile

    xe3는 포기하는 정책인 것 같네요.
    과감하게 xe1은 현재 버전까지만 지원해야, xe3자리가 넓어지고, 라이믹스도 자리가 넓어질텐데요.
    이런식으로 계속확장하면 개발진에서 선택과 집중이 어려워지지 않을까 염려됩니다.
    아 물론 사용자 입장에서는 대환영입니다.