������

������������

������������ ������ģʽ: ǿ�� (Ĭ��) �� �ϸ�ģʽ�� ���ڿ���ʹ���������Ͳ�����������ǿ��ģʽ�����ϸ�ģʽ���� �ַ���(string), ���� (int), ������ (float), �Լ�����ֵ (bool)������������PHP5��������������ͣ��������ӿڣ������� �ص�������

<?php
// Coercive mode
function sumOfInts(int ...$ints)
{
    return 
array_sum($ints);
}

var_dump(sumOfInts(2'3'4.1));

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

int(9)

Ҫʹ���ϸ�ģʽ��һ�� declare ����ָ���������ļ��Ķ���������ζ���ϸ����������ǻ����ļ�����ġ� ���ָ���Ӱ�����������������ҲӰ�쵽�����ķ���ֵ�������μ� ����ֵ��������, ���õ�PHP�����Լ���չ�м��ص�PHP������

�����ı������������ĵ���ʾ���μ����������½ڡ�

����ֵ��������

PHP 7 �����˶���������������֧�֡� ��������������������������������ָ���˺�������ֵ�����͡����õ���������������п��õ�������ͬ��

<?php

function arraysSum(array ...$arrays): array
{
    return 
array_map(function(array $array): int {
        return 
array_sum($array);
    }, 
$arrays);
}

print_r(arraysSum([1,2,3], [4,5,6], [7,8,9]));

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

Array
(
    [0] => 6
    [1] => 15
    [2] => 24
)

�����ı������������ĵ���ʾ���ɲμ� ����ֵ��������.

null�ϲ������

�����ճ�ʹ���д��ڴ���ͬʱʹ����Ԫ���ʽ�� isset()������� ���������null�ϲ������ (??) ����﷨�ǡ��������������ֵ��ΪNULL�� ���ͻ᷵�������ֵ�����򷵻����ĵڶ�����������

<?php
// Fetches the value of $_GET['user'] and returns 'nobody'
// if it does not exist.
$username $_GET['user'] ?? 'nobody';
// This is equivalent to:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

// Coalesces can be chained: this will return the first
// defined value out of $_GET['user'], $_POST['user'], and
// 'nobody'.
$username $_GET['user'] ?? $_POST['user'] ?? 'nobody';
?>

̫�մ�����������ϱȽϷ���

̫�մ����������ڱȽ��������ʽ����$aС�ڡ����ڻ����$bʱ���ֱ𷵻�-1��0��1�� �Ƚϵ�ԭ�������� PHP ������ȽϹ������еġ�

<?php
// ����
echo <=> 1// 0
echo <=> 2// -1
echo <=> 1// 1

// ������
echo 1.5 <=> 1.5// 0
echo 1.5 <=> 2.5// -1
echo 2.5 <=> 1.5// 1
 
// �ַ���
echo "a" <=> "a"// 0
echo "a" <=> "b"// -1
echo "b" <=> "a"// 1
?>

ͨ�� define() ���峣������

Array ���͵ij������ڿ���ͨ�� define() �����塣�� PHP5.6 �н���ͨ�� const ���塣

<?php
define
('ANIMALS', [
    
'dog',
    
'cat',
    
'bird'
]);

echo 
ANIMALS[1]; // ��� "cat"
?>

������

����֧��ͨ��new class ��ʵ����һ�������࣬������������һЩ"�ú󼴷�"�������ඨ�塣

<?php
interface Logger {
    public function 
log(string $msg);
}

class 
Application {
    private 
$logger;

    public function 
getLogger(): Logger {
         return 
$this->logger;
    }

    public function 
setLogger(Logger $logger) {
         
$this->logger $logger;
    }
}

$app = new Application;
$app->setLogger(new class implements Logger {
    public function 
log(string $msg) {
        echo 
$msg;
    }
});

var_dump($app->getLogger());
?>

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

object(class@anonymous)#2 (0) {
}

��ϸ�ĵ����Բο� ������.

Unicode codepoint ת���﷨

�����һ����16������ʽ�� Unicode codepoint������ӡ��һ��˫���Ż�heredoc��Χ�� UTF-8 �����ʽ���ַ����� ���Խ����κ���Ч�� codepoint�����ҿ�ͷ�� 0 �ǿ���ʡ�Եġ�

echo "\u{aa}";
echo "\u{0000aa}";
echo "\u{9999}";

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

a
a (same as before but with optional leading 0's)
��

Closure::call()

Closure::call() �������Ÿ��õ����ܣ���̸�������ʱ��һ�������������ϱհ�����������

<?php
class {private $x 1;}

// PHP 7 ֮ǰ�汾�Ĵ���
$getXCB = function() {return $this->x;};
$getX $getXCB->bindTo(new A'A'); // �м��հ�
echo $getX();

// PHP 7+ �����߰汾�Ĵ���
$getX = function() {return $this->x;};
echo 
$getX->call(new A);

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

1
1

Ϊunserialize()�ṩ����

�������ּ���ṩ����ȫ�ķ�ʽ������ɿ������ݡ���ͨ���������ķ�ʽ����ֹDZ�ڵĴ���ע�롣

<?php

// �����еĶ���ת��Ϊ __PHP_Incomplete_Class ����
$data unserialize($foo, ["allowed_classes" => false]);

// ���� MyClass �� MyClass2 ֮������ж���ת��Ϊ __PHP_Incomplete_Class ����
$data unserialize($foo, ["allowed_classes" => ["MyClass""MyClass2"]);

// Ĭ����������е��඼�ǿɽ��ܵģ���ͬ��ʡ�Եڶ�������
$data unserialize($foo, ["allowed_classes" => true]);

IntlChar

�����ӵ� IntlChar ��ּ�ڱ�¶������� ICU ���ܡ����������������ྲ̬�������ڲ������ַ����� unicode �ַ���

<?php

printf
('%x'IntlChar::CODEPOINT_MAX);
echo 
IntlChar::charName('@');
var_dump(IntlChar::ispunct('!'));

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

10ffff
COMMERCIAL AT
bool(true)

��Ҫʹ�ô��࣬���Ȱ�װIntl��չ

Ԥ��

Ԥ���������ò���ǿ֮ǰ�� assert() �ķ����� ��ʹ�����������������ö���Ϊ��ɱ��������ṩ������ʧ��ʱ�׳��ض��쳣��������

�ϰ汾��API���ڼ���Ŀ�Ľ�������ά����assert()������һ�����Խṹ���������һ��������һ�����ʽ������������һ��������� string��һ�������Ե�boolean��

<?php
ini_set
('assert.exception'1);

class 
CustomError extends AssertionError {}

assert(false, new CustomError('Some error message'));
?>

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

Fatal error: Uncaught CustomError: Some error message

����������Ե�����˵������������ڿ�����������������������������assert()�� expectations section�½��ҵ���

Group use declarations

��ͬһ namespace ������ࡢ�����ͳ������ڿ���ͨ������ use ��� һ���Ե����ˡ�

<?php

// PHP 7 ֮ǰ�Ĵ���
use some\namespace\ClassA;
use 
some\namespace\ClassB;
use 
some\namespace\ClassC as C;

use function 
some\namespace\fn_a;
use function 
some\namespace\fn_b;
use function 
some\namespace\fn_c;

use const 
some\namespace\ConstA;
use const 
some\namespace\ConstB;
use const 
some\namespace\ConstC;

// PHP 7+ �����߰汾�Ĵ���
use some\namespace\{ClassAClassBClassC as C};
use function 
some\namespace\{fn_afn_bfn_c};
use const 
some\namespace\{ConstAConstBConstC};
?>

���������Է��ر��ʽ

�����Ի��� PHP 5.5 �汾����������������Թ����ġ� ��������������������ͨ��ʹ�� return �﷨������һ�����ʽ �����Dz�����������ֵ���� ����ͨ������ Generator::getReturn() ��������ȡ�������ķ���ֵ�� �����������ֻ������������ɲ��������Ժ����һ�Ρ�

<?php

$gen 
= (function() {
    yield 
1;
    yield 
2;

    return 
3;
})();

foreach (
$gen as $val) {
    echo 
$valPHP_EOL;
}

echo 
$gen->getReturn(), PHP_EOL;

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

1
2
3

�����������ܹ��������յ�ֵ��һ���dz����������ԣ� ��Ϊ��ʹ�õ����������Ŀͻ��˴������ֱ�ӵõ�����������������Эͬ���㣩�ķ���ֵ�� �����֮ǰ�汾�пͻ��˴�������ȼ���������Ƿ���������յ�ֵȻ���ٽ�����Ӧ���� ���÷�����ˡ�

Generator delegation

���ڣ�ֻ�����������������ʹ�� yield from�� �Ϳ��԰�һ���������Զ�ί�ɸ��������������� Traversable ������� array��

<?php

function gen()
{
    yield 
1;
    yield 
2;

    yield from 
gen2();
}

function 
gen2()
{
    yield 
3;
    yield 
4;
}

foreach (
gen() as $val)
{
    echo 
$valPHP_EOL;
}

?>

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

1
2
3
4

������������ intdiv()

�¼ӵĺ��� intdiv() �������� �����ij������㡣

<?php

var_dump
(intdiv(103));
?>

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

int(3)

�Ựѡ��

session_start() ���Խ���һ�� array ��Ϊ������ �������� php.ini �ļ������õ� �Ự����ѡ����

�ڵ��� session_start() ��ʱ�� �����ѡ�������Ҳ֧�� session.lazy_write ��Ϊ�� Ĭ�����������������Ǵ򿪵ġ����������ǿ��� PHP ֻ���ڻỰ�е����ݷ����仯��ʱ��� д��Ự�洢�ļ�������Ự�е�����û�з����ı䣬��ô PHP ���ڶ�ȡ��Ự����֮�� �����رջỰ�洢�ļ��������κ��޸ģ�����ͨ������ read_and_close ��ʵ�֡�

���磬���д������� session.cache_limiter Ϊ private�������ڶ�ȡ��ϻỰ����֮�����ϹرջỰ�洢�ļ���

<?php
session_start
([
    
'cache_limiter' => 'private',
    
'read_and_close' => true,
]);
?>

preg_replace_callback_array()

�� PHP 7 ֮ǰ����ʹ�� preg_replace_callback() ������ʱ�� �������ÿ��������ʽ��Ҫִ�лص����������ܵ��¹���ķ�֧���롣 ��ʹ���¼ӵ� preg_replace_callback_array() ������ ����ʹ�ô�����Ӽ�ࡣ

���ڣ�����ʹ��һ��������������ÿ��������ʽע��ص������� ������ʽ������Ϊ��������ļ��� ����Ӧ�Ļص��������ǹ��������ֵ��

CSPRNG Functions

�¼���������ƽ̨�ĺ����� random_bytes() �� random_int() ���������߰�ȫ���������ַ��������������

����ʹ�� list() ������չ��ʵ���� ArrayAccess �ӿڵĶ���

��֮ǰ�汾�У�list() �������ܱ�֤ ��ȷ��չ��ʵ���� ArrayAccess �ӿڵĶ��� ������������Ѿ����޸���

��������

  • �����ڿ�¡���ʽ�Ϸ��ʶ����Ա�����磺 (clone $foo)->bar()��