* PHP 7.4의 새로운 기능
https://xly.kr/posts/87
https://xly.kr/posts/89
https://stitcher.io/blog/new-in-php-74
https://gist.github.com/kimjangwook/627f1a721b659040fb92d55c57cd1a81
* Migrating from PHP 7.3.x to PHP 7.4.x
https://www.php.net/manual/en/migration74.php
//------------
* 화살표 함수
보다 깔끔한 one-liner 함수를 위한 화살표 함수(arrow functions)
이전 :
array_map(function (User $user) { return $user->id; }, $users)
v7.4 :
- fn 키워드로 시작해야 한다
array_map( fn (User $user) => $user->id, $users)
//-----------------------
* ?? (Null 병합 대입 연산자, null coalescing assignment operator) 을 ??= 로 사용 가능
이전 :
$data['date'] = $data['date'] ?? new DateTime();
v7.4 :
$data['date'] ??= new DateTime();
//-----------------------
* 숫자 리터럴 구분자 (Numeric Literal Separator)
숫자에 밑줄 삽입하여 가독성을 높힘
6.674_083e-11; // float
299_792_458; // decimal
0xCAFE_F00D; // hexadecimal
0b0101_1111; // binary
//-----------------------
* Spread 연산자(Spread operator) 사용 가능
$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
// ['banana', 'orange', 'apple', 'pear', 'watermelon'];
//----------------------------------------------------------------
* 사전 로딩(프리로딩, Preloading, pre load)
https://stitcher.io/blog/preloading-in-php-74
https://blog.silnex.kr/php-7-4-preload/
- 성능 측정 : 20%정도 응답 향상
https://stitcher.io/blog/php-preload-benchmarks
- 서버 시작시 파일을 읽어 메모리에 미리 로딩해서 응답시간을 빠르게 함
주의! 사전 로딩된 파일의 변경의 적용할려면 서버를 재시작해야 한다.
윈도우에서는 동작하지 않는다.
Error Preloading is not supported on Windows
- 사용법
php.ini 파일에 사전에 로딩할 파일을 설정
opcache.preload=/project/preload.php
- preload.php
$files = /* An array of files you want to preload */;
foreach ($files as $file) {
opcache_compile_file($file);
}
//-----------------------
* 클래스 속성에 타입 부여 가능
class User {
public int $id;
public string $name;
}
//---------------------------
* __toString() 에서 예외 처리 가능
//-----------------------
* 외래 함수(Foreign Function) 인터페이스: FFI
PHP에서 C 함수를 호출하거나 C 데이터 구조에 액세스 하는 라이브러리를 로드할 수 있다
//-----------------------
* 공변성(Covariance) , 반공변성(Contravariance)
https://gist.github.com/kimjangwook/627f1a721b659040fb92d55c57cd1a81
https://xly.kr/posts/89
- 공변성(Covariance) 반환값
이전에는 함수를 오버라이딩 할 경우, 리턴 값은 부모 클래스의 리턴 타입에서 변경할 수 없었다.
하지만 7.4버전에서는 리턴 타입을 하위 타입으로 대체할 수 있다.
interface Factory
{
function make(): object;
}
class UserFactory implements Factory
{
function make(): User
{
// implements ...
}
}
- 반공변성(Contravariance) 인수
자식 클래스에서 함수를 오버라이딩 할 때, 인수를 부모 클래스의 타입으로 변경할 수 있다.
interface Concatable
{
function concat(Iterator $input)
}
class Collection implements Concatable
{
function concat(iterable $input)
{
// implements ...
}
}
'Code > PHP' 카테고리의 다른 글
[php] PCNTL ( Process Control) 확장 사용법 예제 (0) | 2020.03.25 |
---|---|
php 7.3 PCNTL 확장 기능 활성화 방법 (0) | 2020.03.24 |
[php] PHP 7.4에서 삭제예정으로 정해진 기능(Deprecated) (0) | 2020.03.12 |
[php] OpCache 설정 (0) | 2020.03.11 |
[php] composer 사용법 (속도 향상 방법) (0) | 2020.03.11 |