PHP 7.4의 새로운 기능
본문
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
- 이전글쿠키를 넘어서 : 클라이언트 측 데이터 저장을 위한 오늘날의 옵션 19.09.01
- 다음글jQuery에서 바닐라 JavaScript로 이동하기 위한 치트 시트 19.09.01