PHP8.0 새로운 기능

PHP Core

Named Arguments

명명된 인수에 대한 지원이 추가되었습니다.

Attributes

Attributes에 대한 지원이 추가되었습니다.

Constructor Property Promotion

Constructor Property Promotion(생성자 서명에서 속성 선언)이 추가되었습니다.

Union Types

union types에 대한 지원이 추가되었습니다.

Match Expression

match Expressions에 대한 지원이 추가되었습니다.

Nullsafe Operator

Nullsafe Operator(?->)에 대한 지원이 추가되었습니다.

기타 새로운 기능

  • WeakMap 클래스가 추가되었습니다.
  • ValueError 클래스가 추가되었습니다.
  • 유형이 호환되는 한 이제 임의의 수의 함수 매개변수를 가변 인수로 대체할 수 있습니다. 예를 들어 이제 다음 코드가 허용됩니다.
                          
    <?php
    class A {
         public function method(int $many, string $parameters, $here) {}
    }
    class B extends A {
         public function method(...$everything) {}
    }
    ?>
                          
                        
  • 정적("후기 정적 바인딩"에서와 같이)을 이제 반환 유형으로 사용할 수 있습니다.
                          
    <?php
    class Test {
         public function create(): static {
              return new static();
         }
    }
                          
                        
  • 이제 $object::class를 사용하여 객체의 클래스 이름을 가져올 수 있습니다. 결과는 get_class($object)와 동일합니다.
  • new (expression)(...$args)$obj instanceof(expression)를 사용하여 newinstanceof를 임의의 표현식과 함께 사용할 수 있습니다.
  • 변수 구문에 대한 일부 일관성 수정 사항이 적용되었습니다. 예를 들어 Foo::BAR::$baz 작성이 이제 허용됩니다.
  • 클래스가 __toString() 메서드를 정의하는 경우 자동으로 구현되는 Stringable 인터페이스를 추가했습니다.
  • 특성은 이제 추상 개인 메서드를 정의할 수 있습니다. 이러한 메서드는 특성을 사용하여 클래스에서 구현해야 합니다.
  • 이제 throw를 표현식으로 사용할 수 있습니다. 다음과 같은 용도를 허용합니다.
                          
    <?php
    $fn = fn() => throw new Exception('Exception in arrow function');
    $user = $session->user ?? throw new Exception('Must have user');
                          
                        
  • 이제 매개변수 목록에서 선택적 후행 쉼표를 사용할 수 있습니다.
                          
    <?php
    function functionWithLongSignature(
        Type1 $parameter1,
        Type2 $parameter2, // <-- This comma is now allowed.
    ) {
    }
                          
                        
  • 이제 예외를 변수에 저장하지 않고 catch (Exception)를 작성하여 예외를 포착할 수 있습니다.
  • mixed 유형에 대한 지원이 추가되었습니다.
  • 부모 클래스에 선언된 전용 메서드는 더 이상 자식 클래스의 메서드에 상속 규칙을 적용하지 않습니다(최종 전용 생성자는 제외). 다음 예는 제거된 제한 사항을 보여줍니다.
                          
    <?php
    class ParentClass {
        private function method1() {}
        private function method2() {}
        private static function method3() {}
        // Throws a warning, as "final" no longer has an effect:
        private final function method4() {}
    }
    class ChildClass extends ParentClass {
        // All of the following are now allowed, even though the modifiers aren't
        // the same as for the private methods in the parent class.
        public abstract function method1() {}
        public static function method2() {}
        public function method3() {}
        public function method4() {}
    }
    ?>
                          
                        
  • get_resource_id()가 추가되어 (int) $resource와 동일한 값을 반환합니다. 보다 명확한 API에서 동일한 기능을 제공합니다.

날짜와 시간


DOM

새로운 순회 및 조작 API가 있는 DOMParentNodeDOMChildNode가 추가되었습니다.


Filter

FILTER_VALIDATE_BOOLFILTER_VALIDATE_BOOLEAN의 별칭으로 추가되었습니다. 표준 유형 이름을 사용하므로 새 이름이 선호됩니다.


Enchant

enchant_dict_add(), enchant_dict_is_added(), LIBENCHANT_VERSION이 추가되었습니다.


FPM

다른 끝점(예: 포트 또는 UDS 파일)에서 상태를 가져올 수 있는 새 옵션 pm.status_listen을 추가했습니다. 이 옵션은 모든 하위 항목이 장기 실행 요청을 처리하느라 바쁠 때 상태를 가져오는 데 유용합니다.


Hash

이제 HashContext 개체를 직렬화할 수 있습니다.


Internationalization Functions

IntlDateFormatter::RELATIVE_FULL, IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::RELATIVE_MEDIUMIntlDateFormatter::RELATIVE_SHORT 상수가 추가되었습니다.


LDAP

검색 결과에 참조 메시지 수를 반환하는 ldap_count_references()가 추가되었습니다.


OPcache

opcache.record_warnings ini 설정이 활성화된 경우 OPcache는 컴파일 시간 경고를 기록하고 캐시에서 제공되더라도 다음 포함 시 이를 재생합니다.


OpenSSL

암호화, 암호 해독, 서명, 확인 및 읽기 함수로 구성된 CMS(암호화 메시지 구문)(» RFC 5652) 지원이 추가되었습니다. API는 OPENSSL_ENCODING_DER, OPENSSL_ENCODING_SMIMEOPENSSL_ENCODING_PEM과 같은 새로운 인코딩 상수가 추가된 PKCS #7 함수용 API와 유사합니다.

  • openssl_cms_encrypt()는 인증서를 사용하여 파일의 메시지를 암호화하고 결과를 제공된 파일에 출력합니다.
  • 파일의 S/MIME 메시지를 해독하고 결과를 제공된 파일에 출력하는 openssl_cms_decrypt().
  • CMS 파일을 PEM 인증서 배열로 내보내는 openssl_cms_read().
  • openssl_cms_sign() 인증서와 키로 파일의 MIME 메시지에 서명하고 결과를 제공된 파일에 출력합니다.
  • 데이터 블록이 손상되지 않았는지, 서명자가 자신이 누구인지 확인하고 서명자의 인증서를 반환하는 openssl_cms_verify().

정규식(Perl 호환)

마지막 PCRE 오류에 대해 사람이 읽을 수 있는 메시지를 반환하는 preg_last_error_msg()가 추가되었습니다. 대신 정수 열거형 값을 반환하는 preg_last_error()를 보완합니다.


Reflection


SQLite3

SQLite3::setAuthorizer() 및 해당 클래스 상수가 데이터베이스에 대한 작업을 승인하거나 승인하지 않는 데 사용할 사용자 영역 콜백을 설정하기 위해 추가되었습니다.


Standard Library

  • str_contains(), str_starts_with()str_ends_with()가 추가되어 각각 haystackneedle로 시작하는지, needle로 끝나는지 확인합니다.
  • IEEE 754 의미 체계에서 부동 소수점 나누기를 수행하는 fdiv()가 추가되었습니다. 0으로 나누기는 잘 정의된 것으로 간주되며 Inf, -Inf 또는 NaN 중 하나를 반환합니다.
  • 오류 메시지에 유용한 유형을 반환하는 get_debug_type()이 추가되었습니다. gettype()과 달리 표준 유형 이름을 사용하고 객체에 대한 클래스 이름을 반환하며 리소스에 대한 리소스 유형을 나타냅니다.
  • printf() 및 친구들은 이제 %h%H 형식 지정자를 지원합니다. %g%G와 동일하지만 항상 "."를 사용합니다. LC_NUMERIC 로케일을 통해 판별하는 대신 소수점 구분 기호로 사용하십시오.
  • printf() 및 친구들은 이제 너비 또는 정밀도로 "*" 사용을 지원합니다. 이 경우 너비/정밀도가 printf에 대한 인수로 전달됩니다. 이것은 또한 %g, %G, %h%H와 함께 정밀도 -1을 사용할 수 있습니다. 예를 들어 다음 코드를 사용하여 PHP의 기본 부동 소수점 형식을 재현할 수 있습니다.
                          
    <?php
    printf("%.*H", (int) ini_get("precision"), $float);
    printf("%.*H", (int) ini_get("serialize_precision"), $float);
    ?>
                          
                        
  • proc_open()은 이제 의사 터미널(PTY) 설명자를 지원합니다. 다음은 stdin, stdoutstderr을 동일한 PTY에 첨부합니다.
                          
    <?php
    $proc = proc_open($command, [['pty'], ['pty'], ['pty']], $pipes);
    ?>
                          
                        
  • proc_open()은 이제 소켓 쌍 설명자를 지원합니다. 다음은 stdin, stdoutstderr에 고유한 소켓 쌍을 연결합니다.
                          
    <?php
    $proc = proc_open($command, [['socket'], ['socket'], ['socket']], $pipes);
    ?>
                          
                        

    파이프와 달리 소켓은 Windows에서 I/O 차단 문제를 겪지 않습니다. 그러나 모든 프로그램이 stdio 소켓에서 올바르게 작동하는 것은 아닙니다.

  • 정렬 함수는 이제 안정적이며, 이는 동일한 비교 요소가 원래 순서를 유지함을 의미합니다.
  • array_diff(), array_intersect() 및 그 변형은 이제 단일 배열을 인수로 사용할 수 있습니다. 즉, 이제 다음과 같은 사용이 가능합니다.
                          
    <?php
    // OK even if $excludes is empty:
    array_diff($array, ...$excludes);
    // OK even if $arrays only contains a single array:
    array_intersect(...$arrays);
    ?>
                          
                        
  • ob_implicit_flush()flag 매개변수는 int가 아닌 bool을 허용하도록 변경되었습니다.

Tokenizer

PhpToken은 토크나이저에 개체 기반 인터페이스를 추가합니다. 보다 균일하고 인체공학적인 표현을 제공하는 동시에 메모리 효율적이고 빠릅니다.


Zip