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_KQUEUES
및 POSIX_RLIMIT_NPTS
를 추가했습니다. 이러한 rlimit는 FreeBSD에서만 사용할 수 있습니다.
Standard
fputcsv()는 이제 사용자 정의 End of Line 시퀀스를 정의할 수 있는 새로운 eol
인수를 허용하며 기본값은 동일하게 유지되며 "\n"
입니다.
SPL
SplFileObject::fputcsv()는 이제 사용자 정의 End of Line 시퀀스를 정의할 수 있는 새로운 eol
인수를 허용하며 기본값은 동일하게 유지되며 "\n"
입니다.