Selección de nuevas características de la versión PHP7.X

Este artículo está tomado de php.net


1. PHP7.0X

1.1 Declaración de tipo escalar

Las declaraciones de tipo escalar tienen dos modos: obligatorio (predeterminado) y modo estricto. Ahora se pueden usar los siguientes parámetros de tipo (ya sea en modo coercitivo o estricto): String (cadena), Integer ( int), Float (float) y Boolean ( bool). Extienden otros tipos introducidos en PHP5: nombres de clase, interfaces, matrices y tipos de devolución de llamada.

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

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

La rutina anterior generará

int(9)

1.2 Declaración del tipo de valor de retorno

PHP 7 agregó soporte para declaraciones de tipos de devolución . Similar a la declaración de tipo de parámetro , la declaración de tipo de retorno especifica el tipo del valor de retorno de la función. Los tipos disponibles son los mismos que los disponibles en la declaración de parámetros.

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

La rutina anterior generará

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

1.3 El operador coalescente nulo

Debido a la gran cantidad de casos en los que las expresiones ternarias e isset() se usan juntas en el uso diario , agregamos el ??azúcar sintáctico del operador coalescente nulo ( ). Si la variable existe y el valor no es ** null**, devuelve su propio valor, de lo contrario, devuelve su segundo operando.

<?php
    $username = 'Chon';
    echo $username ?? 'nobody';

La rutina anterior generará

Chon

1.4 <=> operador de nave espacial

<?php
    // 整数
    echo 1 <=> 1; // 0
    echo 1 <=> 2; // -1
    echo 2 <=> 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

1.5 Defina una matriz constante mediante define()

Las constantes de tipo Array ahora se pueden definir con define() . En PHP 5.6 solo puede ser constdefinido .

useLos operadores se han ampliado para admitir la importación de funciones y constantes externas en una clase. Las estructuras correspondientes son use functiony use const.

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

	echo ANIMALS[1];

La rutina anterior generará

cat

1.6 Función de división de enteros intdiv()

La función recién agregada intdiv() se usa para realizar operaciones de división de enteros.

<?php
    var_dump(intdiv(10, 3));

La rutina anterior generará

int(3)

2. PHP7.1.X

2.1 Tipos anulables

Los tipos de parámetros y valores devueltos ahora se pueden convertir en anulables precediendo el tipo con un signo de interrogación. Cuando esta característica está habilitada, el parámetro pasado o el resultado devuelto por la función es del tipo dado o nulo.

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

La rutina anterior generará

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

2.2 Visibilidad constante de clase

<?php

class ConstDemo
{
    
    
    const PUBLIC_CONST_A = 1;
    public const PUBLIC_CONST_B = 2;
    protected const PROTECTED_CONST = 3;
    private const PRIVATE_CONST = 4;
}

2.3 Desestructuración de matrices simétricas

La sintaxis de matriz corta ( []) ahora es una alternativa a la sintaxis de list() y se puede usar para asignar el valor de una matriz a alguna variable (incluida en 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
    }

2.4 list() ahora admite nombres clave

Ahora list() y su nueva []sintaxis admiten la especificación de nombres clave dentro de él. Esto significa que puede asignar cualquier tipo de matriz a algunas variables (similar a la sintaxis de matriz corta)

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

2.5 Admite compensaciones de cadenas negativas

Todas las funciones de manipulación de cadenas que admiten compensaciones ahora admiten números negativos como compensaciones, incluidos los subíndices de cadena a[] través de OR . En este caso, un desplazamiento negativo se interpreta como un desplazamiento desde el final de la cadena.{}

useLos operadores se han ampliado para admitir la importación de funciones y constantes externas en una clase. Las estructuras correspondientes son use functiony use const.

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

    $string = 'bar';
	echo "The last character of '$string' is '$string[-1]'.\n";

La rutina anterior generará

string (1) "e"
int(3)
The last character of 'bar' is 'r'.

3. PHP7.2.x

3.1 Permitir anular métodos abstractos (método abstracto)

Cuando una clase abstracta hereda de otra clase abstracta, la clase abstracta heredada puede anular los métodos abstractos de la clase abstracta heredada.

<?php
    
    abstract class A
    {
    
    
        abstract function test(string $s);
    }
    abstract class B extends A
    {
    
    
        // overridden - still maintaining contravariance for parameters and covariance for return
        abstract function test($s) : int;
    }

La rutina anterior generará

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

Cuarto, PHP7.4.x

4.1 Los atributos agregan tipos calificados

<?php

class User {
    
    
    public int $id;
    public string $name;
}

4.2 Las funciones de flecha proporcionan una forma más concisa de definir funciones.

<?php
    $factor = 10;
    $nums = array_map(fn($n) => $n * $factor, [1, 2, 3, 4]);
    // $nums = array(10, 20, 30, 40);

4.3 Asignación del operador coalescente nulo

<?php
    $array['key'] ??= computeDefault();
    // 等同于以下旧写法
    if (!isset($array['key'])) {
    
    
        $array['key'] = computeDefault();
    }

4.4 Operación de expansión de matriz

$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
// ['banana', 'orange', 'apple', 'pear', 'watermelon'];

Supongo que te gusta

Origin blog.csdn.net/qq_35453862/article/details/126542735
Recomendado
Clasificación