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
const
definido .
use
Los operadores se han ampliado para admitir la importación de funciones y constantes externas en una clase. Las estructuras correspondientes son use function
y 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 enforeach
).
<?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.{}
use
Los operadores se han ampliado para admitir la importación de funciones y constantes externas en una clase. Las estructuras correspondientes son use function
y 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'];