PHP8.1 새로운 기능

PHP Core

Integer Octal Literal Prefix

8진 정수는 이제 2진 및 16진 정수 리터럴과 유사하게 정수 리터럴에서 명시적 0o/0O 접두사를 사용할 수 있습니다.

                  
<?php
014;  // Non-prefix octal literal
0o14; // Prefixed octal literal
?>
                  
                

Array Unpacking with String Keys

문자열 키로 배열 풀기 지원이 추가되었습니다.

                  
<?php
$arr1 = [1, 'a'];
$arr2 = [...$arr1, 'c' => 'd']; //[1, 'a', 'c' => 'd']
?>
                  
                

Named Argument After Argument Unpacking

이제 인수 압축 해제 후 명명된 인수를 지정할 수 있습니다. 예를 들어 foo(...$args, 이름: $arg).

full-path Key for File Uploads

이제 파일 업로드는 업로드된 파일의 전체 경로(단지 기본 이름이 아닌)를 포함하는 추가 full_path 키를 제공합니다. 이것은 "upload webkitdirectory"와 함께 사용하기 위한 것입니다.

Enumerations

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

Fibers

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

First Class Callable Syntax

콜러블에 대한 클로저는 이제 클로저::fromCallable('myFunc')과 동일한 myFunc(...) 구문을 사용하여 생성할 수 있습니다.

참고: ...는 구문의 일부이며 생략이 아닙니다.

Intersection Types

intersection 유형에 대한 지원이 추가되었습니다.

주의 intersection 유형은 union 유형과 함께 사용할 수 없습니다.

Never type

new return 전용 유형은 추가된 적이 없습니다. 이는 함수가 exit(), 예외를 throw하거나 종료하지 않음을 나타냅니다.

new in Initializers

이제 new ClassName() 표현식을 매개변수의 기본값, 정적 변수, 전역 상수 이니셜라이저 및 속성 인수로 사용할 수 있습니다. 이제 개체를 define()에 전달할 수도 있습니다.

Readonly properties

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

Final class constants

클래스 상수에 대한 최종 수정자에 대한 지원이 추가되었습니다. 또한 인터페이스 상수는 기본적으로 재정의할 수 있습니다.


CURL

CURLOPT_DOH_URL 옵션을 추가했습니다.

libcurl >= 7.71.0인 경우 blob 인증서에 대한 옵션이 추가되었습니다.

  • CURLOPT_ISSUERCERT_BLOB
  • CURLOPT_PROXY_ISSUERCERT
  • CURLOPT_PROXY_ISSUERCERT_BLOB
  • CURLOPT_PROXY_SSLCERT_BLOB
  • CURLOPT_PROXY_SSLKEY_BLOB
  • CURLOPT_SSLCERT_BLOB
  • CURLOPT_SSLKEY_BLOB

파일이 아닌 문자열에서 파일을 게시하는 데 사용할 수 있는 CURLStringFile을 추가했습니다.

                  
<?php
$file = new CURLStringFile($data, 'filename.txt', 'text/plain');
curl_setopt($curl, CURLOPT_POSTFIELDS, ['file' => $file]);
?>
                  
                

FPM

오픈메트릭 상태 형식이 추가되었습니다. Prometheus에서 FPM 메트릭을 가져오는 데 사용할 수 있습니다.

pm.max_spawn_rate라는 동적 프로세스 관리자에 대한 새 풀 옵션을 추가했습니다. 동적 오후가 선택되면 더 빠른 속도로 많은 자식을 시작할 수 있습니다. 기본값은 이전에 하드 코딩된 값인 32입니다.


GD

libgd가 Avif 지원으로 빌드된 경우 Avif 지원은 이제 imagecreatefromavif()imageavif()를 통해 사용할 수 있습니다.


Hash

다음 함수 hash(), hash_file()hash_init()는 이제 알고리즘 특정 데이터를 전달하는 데 사용할 수 있는 추가 선택적 options 인수를 지원합니다.

MurmurHash3

스트리밍 지원과 함께 MurmurHash3에 대한 지원이 추가되었습니다. 다음 변형이 구현됩니다.

  • murmur3a, 32-bit hash
  • murmur3c, 128-bit hash for x86
  • murmur3f, 128-bit hash for x64

초기 해시 상태는 options 배열의 seed 키를 통해 전달할 수 있습니다. 예를 들면 다음과 같습니다.

                  
<?php
$h = hash("murmur3f", $data, options: ["seed" => 42]);
echo $h, "\n";
?>
                  
                

유효한 시드 값은 0에서 UINT_MAX로 정의된 플랫폼(일반적으로 4294967295)까지의 범위 내에 있습니다.

xxHash

xxHash에 대한 지원이 추가되었습니다. 다음 변형이 구현됩니다.

  • xxh32, 32-bit hash
  • xxh64, 64-bit hash
  • xxh3, 64-bit hash
  • xxh128, 128-bit hash

초기 해시 상태는 options 배열의 seed 키를 통해 전달할 수 있습니다. 예를 들면 다음과 같습니다.

                  
<?php
$h = hash("xxh3", $data, options: ["seed" => 42]);
echo $h, "\n";
?>
                  
                

비밀 사용은 options 배열의 secret 키 전달을 통해서도 지원됩니다.

                  
<?php
$h = hash("xxh3", $data, options: ["secret" => "at least 136 bytes long secret here"]);
echo $h, "\n";
?>
                  
                

사용자 지정 암호의 품질은 결과 해시의 품질에 매우 중요합니다. 비밀은 가능한 최고의 엔트로피를 사용하는 것이 좋습니다.


MySQLi

New INI directive mysqli.local_infile_directory

mysqli.local_infile_directory INI 지시문이 추가되었으며, 이는 파일을 로드할 수 있는 디렉토리를 지정하는 데 사용할 수 있습니다. mysqli.allow_local_infile이 활성화되지 않은 경우에만 의미가 있습니다. 이 경우 모든 디렉토리가 허용되기 때문입니다.

Binding parameters in execute

이제 매개변수를 배열로 mysqli_stmt::execute()에 전달하여 매개변수를 바인딩할 수 있습니다. 모든 값은 문자열로 바인딩됩니다. 목록 배열만 허용됩니다. 이 새로운 기능은 MySQLi가 libmysqlclient로 컴파일될 때 사용할 수 없습니다.

                  
<?php
$stmt = $mysqli->prepare('INSERT INTO users(id, name) VALUES(?,?)');
$stmt->execute([1, $username]);
?>
                  
                

New method mysqli_result::fetch_column()

결과 세트에서 단일 스칼라 값을 가져올 수 있도록 mysqli_result::fetch_column()이 추가되었습니다. 새 메서드는 가져올 열을 지정하는 int 유형의 선택적 0 기반 column 매개변수를 허용합니다.

                  
<?php
$result = $mysqli->query('SELECT username FROM users WHERE id = 123');
echo $result->fetch_column();
?>
                  
                

PDO

PDO::MYSQL_ATTR_LOCAL_INFILE_DIRECTORY 속성이 추가되었으며, 이는 파일을 로드할 수 있는 디렉토리를 지정하는 데 사용할 수 있습니다. PDO::MYSQL_ATTR_LOCAL_INFILE이 활성화되지 않은 경우에만 의미가 있습니다. 이 경우 모든 디렉토리가 허용되기 때문입니다.


PDO_SQLite

SQLite의 "file:" DSN 구문이 이제 지원되어 추가 플래그를 지정할 수 있습니다. open_basedir가 설정된 경우 이 기능을 사용할 수 없습니다.

                  
<?php
new PDO('sqlite:file:path/to/sqlite.db?mode=ro')
?>
                  
                

POSIX

POSIX_RLIMIT_KQUEUESPOSIX_RLIMIT_NPTS를 추가했습니다. 이러한 rlimit는 FreeBSD에서만 사용할 수 있습니다.


Standard

fputcsv()는 이제 사용자 정의 End of Line 시퀀스를 정의할 수 있는 새로운 eol 인수를 허용하며 기본값은 동일하게 유지되며 "\n"입니다.


SPL

SplFileObject::fputcsv()는 이제 사용자 정의 End of Line 시퀀스를 정의할 수 있는 새로운 eol 인수를 허용하며 기본값은 동일하게 유지되며 "\n"입니다.