PHP7.1 새로운 기능
Nullable types
매개 변수 및 반환 값에 대한 형식 선언은 이제 형식 이름에 물음표를 접두사로 붙여 nullable로 표시할 수 있습니다. 이는 지정된 유형뿐만 아니라 null을 각각 인수로 전달하거나 값으로 반환할 수 있음을 의미합니다.
<?php
function testReturn(): ?string
{
return 'elePHPant';
}
var_dump(testReturn());
function testReturn(): ?string
{
return null;
}
var_dump(testReturn());
function test(?string $name)
{
var_dump($name);
}
test('elePHPant');
test(null);
test();
위의 예는 다음을 출력합니다.
string(10) "elePHPant" NULL string(10) "elePHPant" NULL Uncaught Error: Too few arguments to function test(), 0 passed in...
Void functions
무효 반환 유형이 도입되었습니다. 반환 유형으로 void로 선언된 함수는 반환 문을 완전히 생략하거나 빈 반환 문을 사용해야 합니다. null은 void 함수에 대한 유효한 반환 값이 아닙니다.
<?php
function swap(&$left, &$right): void
{
if ($left === $right) {
return;
}
$tmp = $left;
$left = $right;
$right = $tmp;
}
$a = 1;
$b = 2;
var_dump(swap($a, $b), $a, $b);
위의 예는 다음을 출력합니다.
null int(2) int(1)
void 함수의 반환 값을 사용하려고 하면 경고가 발생하지 않고 단순히 null로 평가됩니다. 그 이유는 경고가 일반 고차 함수의 사용과 관련이 있기 때문입니다.
Symmetric array destructuring
속기 배열 구문([])은 이제 여전히 지원되는 기존 list() 구문의 대안으로 할당(foreach 내 포함)을 위해 배열을 구조화하는 데 사용할 수 있습니다.
<?php
$data = [
[1, 'Tom'],
[2, 'Fred'],
];
// list() style
list($id1, $name1) = $data[0];
// [] style
[$id1, $name1] = $data[0];
// list() style
foreach ($data as list($id, $name)) {
// logic here with $id and $name
}
// [] style
foreach ($data as [$id, $name]) {
// logic here with $id and $name
}
Class constant visibility
클래스 상수의 가시성을 지정하기 위한 지원이 추가되었습니다.
<?php
class ConstDemo
{
const PUBLIC_CONST_A = 1;
public const PUBLIC_CONST_B = 2;
protected const PROTECTED_CONST = 3;
private const PRIVATE_CONST = 4;
}
iterable pseudo-type
iterable이라는 새로운 의사 유형(호출 가능과 유사)이 도입되었습니다. Traversable 인터페이스를 구현하는 배열이나 객체를 허용하는 매개변수 및 반환 유형에 사용할 수 있습니다. 하위 유형 지정과 관련하여 자식 클래스의 매개 변수 유형은 부모의 array 또는 Traversable 선언을 iterable로 확장할 수 있습니다. 반환 유형을 사용하여 자식 클래스는 부모의 iterable 반환 유형을 Traversable을 구현하는 배열 또는 객체로 좁힐 수 있습니다.
<?php
function iterator(iterable $iter)
{
foreach ($iter as $val) {
//
}
}
Multi catch exception handling
이제 파이프 문자(|)를 사용하여 catch 블록당 여러 예외를 지정할 수 있습니다. 이것은 다른 클래스 계층의 다른 예외가 동일하게 처리되는 경우에 유용합니다.
<?php
try {
// some code
} catch (FirstException | SecondException $e) {
// handle first and second exceptions
}
Support for keys in list()
이제 list() 또는 새로운 약식 [] 구문에서 키를 지정할 수 있습니다. 이를 통해 정수가 아니거나 순차 키가 아닌 배열을 구조화할 수 있습니다.
<?php
$data = [
["id" => 1, "name" => 'Tom'],
["id" => 2, "name" => 'Fred'],
];
// list() style
list("id" => $id1, "name" => $name1) = $data[0];
// [] style
["id" => $id1, "name" => $name1] = $data[0];
// list() style
foreach ($data as list("id" => $id, "name" => $name)) {
// logic here with $id and $name
}
// [] style
foreach ($data as ["id" => $id, "name" => $name]) {
// logic here with $id and $name
}
Support for negative string offsets
음수 문자열 오프셋에 대한 지원이 오프셋을 허용하는 문자열 조작 함수와 [] 또는 {}를 사용한 문자열 인덱싱에 추가되었습니다. 이러한 경우 음수 오프셋은 문자열 끝에서 오프셋으로 해석됩니다.
<?php
var_dump("abcdef"[-2]);
var_dump(strpos("aabbcc", "b", -3));
위의 예는 다음을 출력합니다.
string (1) "e" int(3)
음수 문자열 및 배열 오프셋은 이제 문자열 내부의 간단한 변수 구문 분석 구문에서도 지원됩니다.
<?php
$string = 'bar';
echo "The last character of '$string' is '$string[-1]'.\n";
?>
위의 예는 다음을 출력합니다.
The last character of 'bar' is 'r'.
Support for AEAD in ext/openssl
추가 매개변수로 openssl_encrypt() 및 openssl_decrypt() 함수를 확장하여 AEAD(GCM 및 CCM 모드)에 대한 지원이 추가되었습니다.
Convert callables to Closures with Closure::fromCallable()
콜러블을 Closures 객체로 쉽게 변환할 수 있도록 새로운 정적 메서드가 Closures 클래스에 도입되었습니다.
<?php
class Test
{
public function exposeFunction()
{
return Closure::fromCallable([$this, 'privateFunction']);
}
private function privateFunction($param)
{
var_dump($param);
}
}
$privFunc = (new Test)->exposeFunction();
$privFunc('some value');
위의 예는 다음을 출력합니다.
string(10) "some value"
Asynchronous signal handling
pcntl_async_signals()라는 새로운 함수가 도입되어 틱을 사용하지 않고 비동기 신호 처리를 가능하게 했습니다(많은 오버헤드가 발생함).
<?php
pcntl_async_signals(true); // turn on async signals
pcntl_signal(SIGHUP, function($sig) {
echo "SIGHUP\n";
});
posix_kill(posix_getpid(), SIGHUP);
위의 예는 다음을 출력합니다.
SIGHUP
HTTP/2 server push support in ext/curl
서버 푸시 지원이 CURL 확장에 추가되었습니다(버전 7.46 이상 필요). 이것은 새로운 CURLMOPT_PUSHFUNCTION 상수와 함께 curl_multi_setopt() 함수를 통해 활용할 수 있습니다. CURL_PUSH_OK 및 CURL_PUSH_DENY 상수도 추가되어 서버 푸시 콜백의 실행을 승인하거나 거부할 수 있습니다.
Stream Context Options
tcp_nodelay 스트림 컨텍스트 옵션이 추가되었습니다.