Migración de PHP 7.0.x a PHP 7.1.x
PHP Manual

Nuevas características

Tipos 'nullable'

Los tipos ahora pueden ser nullables, pudiendo pasar a, o devolver desde una función el tipo especificado o null. Esto se hace utilizando un signo de cierre de interrogación para prefijar un tipo y denotarlo así como nullable.

<?php
function test(?string $name)
{
    
var_dump($name);
}

El resultado del ejemplo sería:

string(5) "tpunt"
NULL
Uncaught Error: Too few arguments to function test(), 0 passed in...

Funciones 'void'

Se ha introducido un tipo de retorno, void, para amalgamar los otros tipos de retorno introducidos en PHP 7. Las funciones declaradas con 'void' como su tipo de retorno pueden o bien omitir su sentencia 'return' totalmente, o utilizar una senetencia 'return' vacía. 'null' no es un valor de retorno válido para una función 'void'.

<?php
function intercambiar(&$izquierdo, &$derecho) : void
{
    if (
$izquierdo === $derecho) {
        return;
    }

    
$tmp $izquierdo;
    
$izquierdo $derecho;
    
$derecho $tmp;
}

$a 1;
$b 2;
var_dump(intercambiar($a$b), $a$b);

El resultado del ejemplo sería:

null
int(2)
int(1)

El uso del valor de retorno de una función 'void' simplemente se evalúa a null, sin emitir advertencias. Las razón de esto es porque las advertencias implicarían el uso de funciones genéricas de orden mayor.

Symmetric array destructuring

La sintaxis abreviada de array ([]) se puede usar ahora para desestructurar arrays para asignaciones (incluyendo dentro de foreach). Con esta capacidad de This pattern matching ability enables for values to be more easily extracted from arrays.

<?php
$data 
= [
    [
'id' => 1'name' => 'Tom'],
    [
'id' => 2'name' => 'Fred'],
];

while ([
'id' => $id'name' => $name] = $data) {
    
// logic here with $id and $name
}

Class constant visibility

Support for specifying the visibility of class constants has been added.

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

A new pseudo-type (similar to callable) called iterable has been introduced. It may be used in parameter and return types, where it accepts either arrays or objects that implement the Traversable interface. With respect to subtyping, parameter types of child classes may narrow a parent's iterable type to either array or an object (that implements Traversable). With return types, child classes may widen a parent's return type of array or an object to iterable.

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

Multi catch exception handling

Multiple exceptions per catch block may now be specified using the pipe character (|). This is useful for when different exceptions from different class hierarchies are handled the same.

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

Support for keys in list()

list() now enables for keys to be specified inside of it. This means that it can now destructure any type of arrays (likewise the shorthand array syntax).

<?php
$data 
= [
    [
'id' => 1'name' => 'Tom'],
    [
'id' => 2'name' => 'Fred'],
];

while (list(
'id' => $id'name' => $name) = $data) {
    
// logic here with $id and $name
}

Support for Negative String Offsets

Support for negative string offsets has been added to all string-based built-in functions that accept offsets, as well as to the array dereferencing operator ([]).

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

El resultado del ejemplo sería:

string (1) "e"
int(3)

Support for AEAD in ext/openssl

Support for AEAD (modes GCM and CCM) have been added by extending the openssl_encrypt() and openssl_decrypt() functions with additional parameters.

Convert callables to `Closure`s with Closure::fromCallable()

A new static method has been introduced to the Closure class to allow for callables to be easily converted into Closure objects.

<?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');

El resultado del ejemplo sería:

string(10) "some value"

Asynchronous signal handling

A new function called pcntl_async_signals() has been introduced to enable asynchronous signal handling without using ticks (which introduce a lot of overhead).

<?php
pcntl_async_signals
(true); // turn on async signals

pcntl_signal(SIGHUP,  function($sig) {
    echo 
"SIGHUP\n";
});

posix_kill(posix_getpid(), SIGHUP);

El resultado del ejemplo sería:

SIGHUP

HTTP/2 server push support in ext/curl

Support for server push has been added to the CURL extension (requires version 7.46 and above). This can be leveraged through the curl_multi_setopt() function with the new CURLMOPT_PUSHFUNCTION constant. The constants CURL_PUST_OK and CURL_PUSH_DENY have also been added so that the execution of the server push callback can either be approved or denied.


Migración de PHP 7.0.x a PHP 7.1.x
PHP Manual