PHP 7.4가 릴리즈 되었다.
PHPer로써 PHP가 점점 새로워지는 것이 즐겁다.
PHP Conference 2019 Tokyo에서 간단히 소개되었지만, 조금 더 자세히 알아보고자 이 포스트를 작성한다.
https://gist.github.com/2303e0cfa815e748d3d32ffe5680d684
Argument Unpacking이라고도 불리는 스프레드 연산자는 사실 5.6버전부터 사용가능했지만 함수의 인수로써만 사용가능했다.
PHP 7.4버전 부터는 배열을 정의 할 때부터 사용할 수 있게 되었다.
https://gist.github.com/f536d2fa0b577ca4141e51fdcbfd2789
JavaScript에서 우리는 화살표 함수를 사용하면서 편리하다는 것을 알았다.
드디어 PHP에서도 화살표 함수가 사용 가능하게 되었다.
https://gist.github.com/cb2ebb405d96cea5b0b1f73bc49d67b5
https://gist.github.com/a9e8ff9da53a6b3a90ce6752b86c7424
설명이 어려워서 두 가지로 나누어 설명해보도록 한다.
이전에는 함수를 오버라이딩 할 경우, 리턴 값은 부모 클래스의 리턴 타입에서 변경할 수 없었다.
하지만 7.4버전에서는 리턴 타입을 하위 타입으로 대체할 수 있다.
https://gist.github.com/8de3eb62a5c95252b042ebc2e911b133
자식 클래스에서 함수를 오버라이딩 할 때, 인수를 부모 클래스의 타입으로 변경할 수 있다.
https://gist.github.com/bab5b1928da0105db86fa0b05393d7c4
C#, 자바, 파이썬 등에서는 이미 구현되어 있는 약한 참조가 PHP에서도 구현되었다.
약한 참조란, 참조된 원래의 오브젝트가 파괴되면, 참조한 오브젝트도 파괴되는 성질을 가진 참조 형태를 의미한다.
https://gist.github.com/1f52317d33ed6be387455cc018ff8e8e
서비스의 속도를 개선하기 위해 OPCache
를 사용하여 요청이 전송된 파일을 Opcodes
로 변환한 경험이 있을 것이라 생각한다.
이 때, 요청이 왔을 경우 변환
이라는 것은 Opcodes
로 변환을 하는 데에 시간이 걸린다는 것을 의미한다.
7.4 버전에서는 프리로딩을 이용하여 서버가 시작할 때 특정 PHP 파일 세트를 메모리에 로드하여 변환에 걸리는 시간을 줄일 수 있다.
문제는, 한 번 프리로딩 된 파일은 변경 사항에 대해서 인지하지 못한다는 것에 있다.
프리로딩 된 파일이 변경되었을 경우, 필수적으로 서버를 재시작 하여야 한다.
오브젝트를 직렬화 하기 위한 방법으로 __sleep()
매직 함수, __wakeup()
매직 함수, Serializable
인터페이슬 사용하는 세가지 방법이 있었지만,
세가지 방법 모두 문제가 존재하였다.
7.4 버전에서는 이 것을 해결하기 위해 __serialize()
와 __unserialize()
매직 함수를 추가하였다.
https://gist.github.com/ee2f81c62036a659f7d002d3f46811db
PHP에서 C 함수를 호출하거나 C 데이터 구조에 액세스 하는 라이브러리를 로드할 수 있도록 하여다.
속도 개선의 측면에서 좋은 점이 있을 것도 같으나, 내가 앞으로 FFI를 사용할지는 물음표이다.
https://gist.github.com/49b5b3093f0f225ec2962ede584c1dab
PHP 7.4에서는 숫자를 분리하기 위해 언더스코어를 사용하는 것이 허용되었다.
https://gist.github.com/f06924a53397746607711418c943e4a1
이 것을 무어라 번역하면 좋을지 모르겠다.
굳이 번역하자면, 참조값들을 반영하기 위한 것
정도 일까?
이전에는 두 변수가 동일한 내용을 참조하고 있는지 확인하는 작업이 꽤나 무거운 작업이었지만,
PHP 7.4에 도입된 Reflection for references
를 사용하면 코스트를 낮출 수 있게 되었다.
str_split()
함수는 문자열을 배열로 반환한다.
mb_str_split()
은 문자를 chunks(덩어리)
별로 해석하여 배열로 반환한다.
https://gist.github.com/5b79f844eb55dba11e8ed6c9e4eb19c8
password_algos()
라는 새로운 함수가 추가되었고, 이 함수는 등록된 패스워드 해싱 알고리즘의 리스트를 반환한다.
여기까지 13개의 PHP 7.4의 신기능을 알아보았다.
PHP: New Features에서 더 자세한 내용을 찾을 수 있다.
내년에는 PHP 8이 릴리즈 될 것이며, PHP는 점점 진화하고 있는게 느껴진다.