������

��Ϊ�գ�Nullable������

�����Լ�����ֵ���������ڿ���ͨ��������ǰ����һ���ʺ�ʹ֮����Ϊ�ա� �������������ʱ������IJ������ߺ������صĽ��Ҫô�Ǹ��������ͣ�Ҫô�� 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 ����

һ���µķ���ֵ����void�����롣 ����ֵ����Ϊ void ���͵ķ���Ҫô�ɴ�ʡȥ return ��䣬Ҫôʹ��һ���յ� return ��䡣 ���� void ������˵��NULL ����һ���Ϸ��ķ���ֵ��

<?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 �����Ҳ�������κξ��档��ô����ԭ���Dz���Ӱ����߲�εķ�����

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
}

�ೣ���ɼ���

������֧�������ೣ���Ŀɼ��ԡ�

<?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 �

����������һ���µı���Ϊiterable��α�� (��callable����)�� ����Ա����ڲ������߷���ֵ�����У�����������������ʵ����Traversable�ӿڵĶ��� �������࣬����������ʱ����������ս������iterable���͵�array ��һ��ʵ����Traversable�Ķ��󡣶��ڷ���ֵ����������ؿ���� array����󷵻�ֵ���͵�iterable��

<?php
function iterator(iterable $iter)
{
    foreach (
$iter as $val) {
        
//
    
}
}

���쳣������

һ��catch�������ڿ���ͨ���ܵ��ַ�(|)��ʵ�ֶ���쳣�IJ��� �������Ҫͬʱ�������Բ�ͬ��IJ�ͬ�쳣ʱ�����á�

<?php
try {
    
// some code
} catch (FirstException SecondException $e) {
    
// handle first and second exceptions
}

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
}

֧��Ϊ�����ַ���ƫ����

��������֧��ƫ�������ַ����������� ��֧�ֽ��ܸ�����Ϊƫ����������ͨ��[]��{}�����ַ����±�������������£�һ��������ƫ�����ᱻ���Ϊһ�����ַ�����β��ʼ��ƫ������

<?php
var_dump
("abcdef"[-2]);
var_dump(strpos("aabbcc""b", -3));

�������̻������

string (1) "e"
int(3)

Negative string and array offsets are now also supported in the simple variable parsing syntax inside of strings.

<?php
$string 
'bar';
echo 
"The last character of '$string' is '$string[-1]'.\n";
?>

�������̻������

The last character of 'bar' is 'r'.

ext/openssl ֧�� AEAD

ͨ����openssl_encrypt()��openssl_decrypt() ��Ӷ������������֧����AEAD (ģʽ GCM and CCM)��

ͨ�� Closure::fromCallable() ��callablesתΪ�հ�

Closure������һ����̬���������ڽ�callable���ٵ� תΪһ��Closure ����

<?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"

�첽�źŴ���

һ���µ���Ϊ pcntl_async_signals() �ķ������ڱ����룬 ������������ ticks ���������ܶ����Ŀ��������첽�źŴ���

<?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 ����ߣ����������ͨ�� curl_multi_setopt() �������µij��� CURLMOPT_PUSHFUNCTION �����е��ڡ����� CURL_PUST_OK �� CURL_PUSH_DENY Ҳ�Ѿ�����ӽ������Ա���������͵Ļص������������Լ���ͬ���ܾ�����