분류 php

PHP 7.4의 새로운 기능

컨텐츠 정보

  • 조회 322 (작성일 )

본문

PHP 7.4는 2019 년 11 월 28 일에 출시 될 예정입니다. 

기능은 다음과 같습니다.


  • 보다 깔끔한 원 라이너 함수를 위한 화살표 함수(arrow functions)
  • 성능 향상을 위한 사전 로드(Preloading)
  • 클래스의 유형 속성(Typed properties)
  • 유형 분산 개선
  • 속기의 null 유착 할당 연산자(null coalescing assignment operator)
  • PHP에서 더 나은 확장 개발을 위한 FFI
  • 밑줄을 사용하여 숫자 값의 형식을 지정할 수 있습니다.
  • 배열의 확산 연산자(Spread operator)
  • ...


https://stitcher.io/blog/new-in-php-74 


PHP 7.4에는 많은 새로운 기능이 포함되어 있습니다. 모든 새로운 기능의 목록으로 시작한 다음 변경 사항 및 더 이상 사용되지 않는 사항을 살펴 보겠습니다.


Arrow functions rfc


"short closures"라고도 하는 화살표 함수는 덜 장황한 한 줄짜리 함수를 허용합니다.


이전 :

array_map(function (User $user) { return $user->id; }, $users) 


이제 :

array_map(fn (User $user) => $user->id, $users) 


화살표 함수에 대한 몇 가지 참고 사항이 있습니다.

  • 항상 부모 범위에 액세스 할 수 있으므로 use 키워드가 필요하지 않습니다.
  • $this은 일반적인 클로저처럼 사용할 수 있습니다.
  • 화살표 함수는 하나의 행만 포함 할 수 있으며 이는 리턴 문이기도 합니다.


Typed properties rfc 


클래스 변수는 유형 힌트를 사용할 수 있습니다.


class A { public string $name; public ?Foo $foo; } 


Improved type variance rfc 


유형 분산은 자체 블로그 게시물의 가치가 있는 또 다른 주제이지만 간단히 말해 공변량 반환 유형을 사용할 수 있습니다.


class ParentType {} class ChildType extends ParentType {} class A { public function covariantReturnTypes(): ParentType { /* … */ } } class B extends A { public function covariantReturnTypes(): ChildType { /* … */ } } 


– 그리고 반 변인 인수.


class A { public function contraVariantArguments(ChildType $type) { /* … */ } } class B extends A { public function contraVariantArguments(ParentType $type) { /* … */ } } 


Null coalescing assignment operator rfc 


다음은 Null 병합 작업의 약어 인 Null 병합 할당 연산자입니다. 이것을 하는 대신 :


$data['date'] = $data['date'] ?? new DateTime(); 


당신은 이것을 할 수 있습니다 :


$data['date'] ??= new DateTime(); 


Array spread operator RFC 


다음으로 스프레드 연산자를 배열로 사용할 수 있습니다.


$arrayA = [1, 2, 3]; $arrayB = [4, 5]; $result = [0, ...$arrayA, ...$arrayB, 6 ,7]; // [0, 1, 2, 3, 4, 5, 6, 7] 


이것은 숫자 키가 있는 배열에서만 작동합니다.


Numeric Literal Separator RFC 


PHP 7.4에서는 밑줄을 사용하여 숫자 값을 시각적으로 구분할 수 있습니다. 다음과 같이 보입니다 :


$unformattedNumber = 107925284.88; $formattedNumber = 107_925_284.88; 


밑줄은 엔진에 의해 무시됩니다.


Foreign function interface rfc 


좀 더 핵심적인 기능인 foreign function 인터페이스 또는 "FFI"로 넘어 가면 사용자 영역에서 C 코드를 호출 할 수 있습니다. 이것은 PHP 확장이 순수 PHP로 작성되고 composer를 통해 로드 될 수 있음을 의미합니다.


이 주제는 복잡한 주제입니다. 이 기능을 제대로 사용하려면 여전히 C 지식이 필요합니다.


Preloading rfc 


또 다른 하위 레벨 기능은 사전로드입니다. PHP 코어에 추가 된 놀라운 성능으로 성능이 크게 향상 될 수 있습니다.


간단히 말해 : 프레임 워크를 사용하는 경우 모든 요청에서 해당 파일을 로드하고 링크해야 합니다. 사전로드는 서버가 시작시 메모리에 PHP 파일을 로드하고 이후의 모든 요청에 ​​영구적으로 사용 가능하도록 합니다.


사전로드 된 파일의 소스가 변경되면 서버를 다시 시작해야 합니다.


Custom object serialization rfc 


__serialize 및 __unserialize라는 두 가지 새로운 마법 방법이 추가되었습니다. 이러한 방법과 __sleep 및 __wakeup의 차이점은 RFC에서 설명합니다.


Reflection for references rfc 


Symfony의 var dumper와 같은 라이브러리는 리플렉션 API에 크게 의존하여 변수를 안정적으로 덤프합니다. 이전에는 참조를 올바르게 반영 할 수 없었기 때문에 이러한 라이브러리는 이를 감지하기 위해 해킹에 의존합니다.


PHP 7.4는이 문제를 해결하는 ReflectionReference 클래스를 추가합니다.


Weak references rfc 


약한 참조는 객체에 대한 참조이며 파괴되지 않습니다.


mb_str_split added RFC 


이 함수는 str_split과 동일한 기능을 제공하지만 멀티 바이트 문자열입니다.


Password Hashing Registry RFC 


해시 라이브러리 사용 방식이 내부적으로 변경되어 사용자가 보다 쉽게 ​​사용할 수 있습니다.


보다 구체적으로, 등록 된 모든 암호 알고리즘의 목록을 반환하는 새로운 기능인 password_algos가 추가되었습니다.


변경 및 지원 중단 


새로운 기능 외에도 언어에 많은 변화가 있습니다. 이러한 변경 사항 중 대부분은 중단되지 않지만 일부는 코드 기반에 영향을 줄 수 있습니다.


지원 중단 경고는 정의 "중단"이 아니라 향후 기능이 제거되거나 변경 될 것이라는 사실을 개발자에게 알리는 것입니다. 더 이상 사용되지 않는 경고를 무시하지 않고 즉시 수정하는 것이 좋습니다. PHP 8.0의 업그레이드 경로가 더 쉬워 질 것입니다.


Left-associative ternary operator deprecation RFC 


삼항 연산자에는 PHP에 이상한 점이 있습니다. 이 RFC는 중첩 된 삼항 명령문에 대해 사용 중단 경고를 추가합니다. PHP 8에서 이 지원 중단은 컴파일 시간 오류로 변환됩니다.


1 ? 2 : 3 ? 4 : 5; // deprecated (1 ? 2 : 3) ? 4 : 5; // ok 


Exceptions allowed in __toString RFC 


이전에는 __toString에서 예외를 throw 할 수 없었습니다. 일부 오래된 핵심 오류 처리 메커니즘에 대한 해결 방법으로 인해 금지되었지만 Nikita는이 "솔루션"이 실제로 해결하려는 문제를 해결하지 못했다고 지적했습니다.


이 동작은 이제 변경되었으며 __toString에서 예외가 발생할 수 있습니다.


Concatenation precedence RFC 


다음과 같이 쓰면 :


echo "sum: " . $a + $b; 


PHP는 이전에 다음과 같이 해석했습니다.


echo ("sum: " . $a) + $b; 


PHP 8은 다음과 같이 해석되도록 만들 것입니다.


echo "sum :" . ($a + $b); 


PHP 7.4는을 포함하는 괄호로 묶지 않은 표현식이 나타날 때 사용 중단 경고를 추가합니다. + 또는-부호 앞에.


array_merge without arguments UPGRADING 


스프레드 연산자를 추가 했으므로 array_merge를 사용하려는 경우가 있습니다.


$merged = array_merge(...$arrayOfArrays); 


$ arrayOfArrays가 비어있는 경우를 지원하기 위해 array_merge 및 array_merge_recursive는 이제 빈 매개 변수 목록을 허용합니다. 입력이 전달되지 않으면 빈 배열이 반환 됩니다.


Curly brackets for array and string access RFC 


중괄호를 사용하여 배열 및 문자열 오프셋에 액세스 할 수 있었습니다.


$array{1}; $string{3}; 


이것은 더 이상 사용되지 않습니다.


Invalid array access notices RFC 


예를 들어 정수에 배열 액세스 구문을 사용하는 경우 PHP는 이전에 null을 반환했습니다. PHP 7.4부터 공지가 발행됩니다.


$i = 1; $i[0]; // Notice 


proc_open improvements UPGRADING 


쉘을 거치지 않고 프로그램을 실행할 수 있도록 proc_open이 변경되었습니다. 명령에 문자열 대신 배열을 전달하면 됩니다.


strip_tags also accepts arrays UPGRADING 


예를 들어 다음과 같이 여러 태그 만 제거 할 수 있었습니다.


strip_tags($string, '<a><p>') 


PHP 7.4는 또한 배열의 사용을 허용합니다 :


strip_tags($string, ['a', 'p']) 


ext-hash always enabled rfc 


이 확장은 이제 모든 PHP 설치에서 영구적으로 사용 가능합니다.


Improvements to password_hash rfc 


이것은 작은 변화이며 PHP가 libargon없이 컴파일 될 때 argon2i 및 argon2id 해싱 지원을 추가합니다.


PEAR not enabled by default EXTERNALS 


PEAR는 더 이상 적극적으로 유지되지 않기 때문에 핵심 팀은 PHP 7.4로 기본 설치를 제거하기로 결정했습니다.


Several small deprecations RFC 


이 RFC에는 각각 자체 투표권이 있는 많은 지원 중단이 포함되어 있습니다. 더 이상 사용되지 않는 항목의 목록이 있지만 RFC 페이지에서 보다 자세한 설명을 읽으십시오.

  • The real type
  • Magic quotes legacy
  • array_key_exists() with objects
  • FILTER_SANITIZE_MAGIC_QUOTES filter
  • Reflection export() methods
  • mb_strrpos() with encoding as 3rd argument
  • implode() parameter order mix
  • Unbinding $this from non-static closures
  • hebrevc() function
  • convert_cyr_string() function
  • money_format() function
  • ezmlm_hash() function
  • restore_include_path() function
  • allow_url_include ini directive