* 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 ...
    }
}


반응형
Posted by codens