XE Tips 는 제가 XE 공홈에 쓴 XE 관련 유용한 팁들입니다. 기능개선은 공홈에 안 적어둔 XE 유용 개선팁들입니다.
유용정보는 외부 검색을 통해 알아낸 소스등을 기재해둔 곳입니다.
버그 신고내역들은 XE 사용하다가 발견한 버그 패치방법들로, Core Issue 에 기록해뒀기에 XE 에 적용이 되었을 가능성이 있겠죠
제가 쓴 글들에 대해 퍼가실때는 꼭 출처를남겨주시고.. (다만 플래시뷰 기반이기에 퍼가기는조금 힘들 수 있겠죠 ^^;)
타회원의 글들도 적혀있는 출처를 같이 꼭 기재해주세요
출처 | XE Github |
---|---|
출처URL | https://github.com/xpressengine/xe-core/issues/2181 |
php 7.1 에서 오류나는 함수의 변수 초기화 관련 오류 사항 외에
( http://sejin7940.co.kr/xe_tips/117103 참조 )
php 7.2 기반에서 문제되는 사항은 Object 클래스의 사용금지로 생기게 된 오류들이다.
최신 XE 에서는 이 부분들 대응이 다 되어있는데
서드파티 자료들은 거의 대응이 안 되어있을것이다.
아직 7.2 를 안 쓰는게 안전하고, 써야한다면 관련 부분들을 다 찾아서 고쳐야한다
https://xe1.xpressengine.com/devlog/23249915
https://github.com/xpressengine/xe-core/issues/2181
bnu 님과 kijin 님의 이슈들을 기재해둡니다.
추후 이 문제가 발생하실때 참조하거나, 자료 만들때 참고해서 미리미리 보완작업을 해두는게 좋을듯하네요
PHP 7.2에서 Object
클래스를 사용할 수 없음.
PHP 7부터 예약어로 지정됐고, 최근 PHP 7.2에서 변경으로 인해 사용이 제한 됨.
PHP 7.2는 현재 RC6 단계이지만 이 변경 사항은 정식버전에도 반영될 것으로 보임
XE는 이러한 PHP 7.2의 변경사항에 맞춰 Object
클래스의 이름을 BaseObject
로 변경합니다.
이로 인한 호환성 문제를 피하기 위해 PHP 7.2 미만에서는 여전히 Object
클래스를 사용할 수 있습니다
(class_alias()
를 이용해 Object
클래스를 유지합니다)
이는 PHP 7.2의 변경으로 인해 XE가 변경을 따라갈 수 밖에 없는 부분입니다.
return new Object(...)
과 같은 코드를 사용한 모듈, 애드온, 위젯 등은 이 변경사항을 반영하지 못하면 PHP 7.2 이상에서 동작할 수 없습니다. 다음과 같이 변경 사항을 적용해야 PHP 7.2 미만과 이상에서도 동작할 수 있습니다.
써드파티 모듈 등에서 return new Object(-1, 'error message')
처럼 사용하고 있다면 다음과 같이 수정해야 합니다.
return new Object(-1, 'errmsg'); $output = new Object(); // 이와 같이 사용했다면 아래와 같이 변경 return class_exists('BaseObject') ? new BaseObject(-1, 'errmsg') : new Object(-1, 'errmsg'); $output = class_exists('BaseObject') ? new BaseObject() : new Object();
이름이 바뀐 BaseObject
와 Object
클래스를 모두 지원할 수 있도록 합니다.
kijin 님께서 제시해주신 코드이며, 동작에 문제가 없는 것 까지 확인해주셨습니다.
다만, PHP 7.2의 정식 버전이 배포되기 이전이므로 PHP 7.2 정식 버전 및 이후의 변경에 따라 이 방법이 유효하지 않을 수도 있습니다.
또는.....
서드파티 자료 제작자 중 수정하실 부분이 많다면 아래와 같이 편리하게 처리할 수도 있습니다.
우선 모듈명.class.php
에 정의된 모듈 기본 클래스에 메소드 하나를 추가합니다.
public function makeObject($code, $msg)
{
return class_exists('BaseObject') ? new BaseObject($code, $msg) : new Object($code, $msg);
}
그리고 이 클래스를 상속받는 다른 모든 클래스(컨트롤러, 모델, 뷰 등)에서
return new Object(-1, 'errmsg');
라고 되어 있던 부분을 모두
return $this->makeObject(-1, 'errmsg');
라고 바꾸시면 그나마 깔끔하게 호환성을 유지할 수 있습니다.
서드파티 모듈 내에서 이런 함수는 얼마든지 자유롭게 만들어 쓰셔도 됩니다.
댓글 0
번호 | 카테고리 | 제목 | 출처 | 등록일 | 조회 |
---|---|---|---|---|---|
공지 | XE 기능개선 | XE 1.11.18 이후 버전의 익명 수정 버그 수정법 | xetown | 2023.10.07 | 3199 |
공지 | XE 기능개선 | XE 1.11.14 보안패치 - 타인의 쪽지 내용을 확인할 수 있는 버그 패치방법 | xetown | 2023.10.03 | 3265 |
공지 | XE 기능개선 | XE 1.11.6 이후 보안배치 #4 | rhymix | 2022.07.05 | 3433 |
공지 | 1.11.6 | XE 1.11.6 이후 보안배치 #3 | rhymix | 2022.04.02 | 3378 |
공지 | 1.11.6 | XE 1.11.6 이후 보안배치 #1 | xetown | 2021.06.22 | 3774 |
공지 | 1.11.6 | XE 1.11.6 이하 에서 공개댓글을 비밀댓글로 변경시 생길 수 있는 오류 수정법 | sejin7940 | 2021.01.10 | 3696 |
공지 | XE 기능개선 | XE 1.11.4 이후에서 파일 업로드시 정상 작동 안 하는 현상 수정법 | XE github | 2019.04.02 | 6449 |
공지 | XE 기능개선 | php 7.1 환경에서 XE 오류 나는 경우 확인할 사항 | sejin7940 | 2018.07.11 | 6372 |
» | 유용정보 | php7.2 환경에서 XE 오류가 생기는 경우 - Object 클래스 변경 필요 | XE Github | 2017.11.27 | 9939 |
공지 | XE 기능개선 | XE 1.8.30 이하에서 반드시 수정해주셔야하는 부분입니다. | XE 1.8.31 | 2017.02.26 | 7160 |
공지 | 1.8.18 | XE 1.8.18 에서 사용시 반드시 수정해야할 사항들 ( XE 1.8.20 이후에서는 수정 불필요 ) | xetown | 2016.04.03 | 26281 |
공지 | XE 기능개선 | XE 1.8.12 이후부터 proc controller 일부가 작동 안 할 경우 확인할 부분 [1] | XE | 2015.10.16 | 26201 |
1 | 1.8.24 | 익명 설정을 사용하는 경우, 글쓴이가 자신의 글을 추천 / 비추천 / 신고 할 수 있는 버그 | sejin7940 | 2016.09.18 | 292 |