PHP 8 출시..? 어떤 것이 달라질까?
블로거 워누입니다!
오늘은 IT쪽 뉴스를 찾아보다가 조금 놀라운 소식을 접하게 되어 여러분과 같이 공유하고자 합니다!
그것은 바로 PHP8이 출시된다는 뉴스!!
.
<관련 기사>
https://zdnet.co.kr/view/?no=20200610173614
웹서비스 발전 이끈 PHP, 25주년 맞아
웹프로그래밍 핵심 언어 중 하나인 PHP가 올해로 25주년을 맞았다.PHP는 그린란드 출신 프로그래머 라스무스 레도프(Rasmus Lerdorf)가 1995년 6월 8일 출...
zdnet.co.kr
.
세상에.. 제가 회사에 입사할때 쯤인 2017년 말에 PHP 7.2가 나오는 바람에 5.6버전 아래로 구성되었던 샘플의 파라미터를 PHP 규칙도, 사용 방법도 전혀 모르면서 구글신에게 의존하며 검색했던게 엊그제 같은데.. 재작년에는 7.3이 나오면서 5.6을 완전히 지원 종료하고(php 5.x의 15년 역사가 막을 내리는 순간이라네요..) 작년에 7.4가 나오더니 7.x 출시한 지 5년만에....!(TMI : 7.0은 2015년 12월 3일에 정식 출시되었다고 합니다!)
.
PHP 그룹에서 올해 2020년 말, 12월 즈음에 PHP8을 출시한다고 하네요!
벌써 베타버전이 PHP 사이트에서 제공중이기도 합니다.
.
.
이전에 PHP 5.6에서 7.0 버전으로 올라갔을 때는 아무래도 5.6 버전을 가장 많이 사용하다 보니, 7.0으로 업데이트 시 유지 및 보수가 용이하도록 새로운 기능을 추가하되 기존 호환성을 최대한 유지하느라 PHP 개발자들은 큰 신경을 쓸 필요가 없었다고 합니다. 이 때 추가되었던 기능을 잠깐 보자면,
- 성능 향상 - PHP 5.6 보다 두배 이상 빠른 속도
- 메모리 사용률이 현저히 감소
- 추상 구문 트리(Abstract Syntax Tree)
- 일관된 64비트 지원(Consistent 64-bit support)
- 향상된 예외 상속(Improved Exception hierarchy)
- 많은 치명적 에러들이 예외로 전환 됨
- 보안 난수 발생기(Secure random number generator)
- 오래 됐거나 지원하지 않는 SAPI와 확장 지원 중단
- Null 병법 연산자(The null coalescing operator (??))
- 리턴 값, 스칼라 타입 정의
- 익명 클래스(Anonymous Classes)
- Zero cost asserts
출처 - 위키백과(https://ko.wikipedia.org/wiki/PHP)
.
이정도로 정리될 수 있겠네요! 위키에서 잘 정리해놓았습니다ㅎㅎ 속도가 빨짐과 동시에 메모리 사용률도 감소, 게다가 예외 상속이 향상되면서 그 전에 많았던 치명적 에러들이 예외로 전환되는 효과가 있어 개발자들이 7.0으로 업데이트함에 있어 큰 이슈가 없을만 했습니다.
(그 외 기능은 PHP에서 "https://wiki.php.net/phpng-upgrading" 링크를 통해 잘 설명하고 있더군요!)
.
그럼 이제 얼마전에 출시된 7.4.9에서 대망의 8.0으로 넘어갈 때에는 어떤 이슈가 있는지 한번 보도록 하겠습니다.
(대규모 변경점을 예고한 PHP 그들은 과연...?)
뉴스에 나온 내용 부터 정리해볼게요!
1. 변수 유형을 여러개 지정할 수 있는 유니온 형 지원
-> PHP는 일반적으로 언어가 변수 유형을 자동으로 결정해주는 동적 타이밍을 채용하는 언어인데, 이번 PHP8에서 변수 유형을 여러개 지정할 수 있도록 지원한다고 합니다. 유니온 형과 PHP의 궁합이 매우 좋을 것 같네요!!
2. JIT(Just In Time) 컴파일 지원
JIT는 just in time의 약자로 변환된 코드를 미리 저장해 비슷한 명령이 요구되면 해당 코드를 바로 사용해 속도를 높이는 기술입니다.
PHP가 인터프리터 프로그래밍 언어인지라 프로그램을 실행할 때마다 기계가 코드를 읽고 실행할 수 있는 코드로 변환하고, 실행이 완료되면 변환된 코드를 삭제하기에, C나 Java와 같은 컴파일러 형 언어와 비교하면 실행속도 면에서는 매우 불리하였습니다.
이번 PHP8에서는 이 부분을 개선하려고 JIT 컴파일을 지원할 예정이라고 하니, 기존 인터프리터 언어의 특징을 탈피하고 컴파일러 타입처럼 비슷한 명령의 경우 해당 코드를 바로 사용하여 속도를 높인다면 속도 면에서 뒤지지 않을 것으로 예상됩니다!
3. 클래스 호출 방식 추가
->PHP 8에서 객체의 클래스 이름을 가져올 때 get_class()뿐만 아니라 ::class를 사용할 수 있게 되었다고 합니다.
.
<예시>
$foo = new Foo();
var_dump($foo::class);
.
이렇게 보니 편리하게 쓸 수 있을 것 같습니다! 확실
4. 피연산자 변경 순서 변경
PHP 8에서는 피연산자를 연결하는 우선 순위가 변경되었다고 합니다.
<예시>
echo "sum: " . $a $b;
PHP 7 해석 : echo ("sum: " . $a) $b;
PHP 8 해석 : echo "sum: " . ($a $b);
아니 이게 무슨 개똥같은 해석이람..? 이건 좀 생각해봐야 할 것 같네요.. (가만히 있는 피연산 순서는 왜바꿔..)
이 외에도 많은 기능들을 제공하고 있습니다!
반환 값 형식으로 static 지정 가능, 기본 오류 레벨 변경(E_NOTICE나 E_DEPRECATED로 분류되던 오류가 E_ALL로 통합), TypeError의 일관성 보장, fdiv 함수 추가 등 대규모 변경점이라고 예고한 PHP의 말마따나 진짜 많고 다양한 기능을 제공하려고 하는 것 같습니다.
이번 업데이트 내용은 "https://stitcher.io/blog/new-in-php-8" 페이지에서 제공해주는 내용을 기반으로 작성해 보았는데요, 알파버전 이후 베타버전이 지속적으로 나오면서 조금씩 수정되거나 삭제, 추가되고 있다고도 합니다. 올해 말까지 계속해서 나올 베타버전에 대하여 계속 주목해볼 필요가 있겠네요!
기존에 개인적으로 작업하고 있던 Mantis나 wordpress가 PHP8버전을 만나면 어떻게 변경될지도 기대가 되는 부분입니다! 만약 PHP 개발자라면 베타버전을 다운로드해보고 체험해보시길 권장해봅니다! 저도 조만간 다운로드받고 후기를 여기에 올려볼게요 ㅎㅎ
오늘 글은 여기까지입니다! 그럼 이만!!