La versión 7.2 de PHP incorporó nuevas características de las cuáles mencionamos algunas:
- Nuevo tipo object
- Carga de extensiones por nombre
- Sobre carga de métodos abstractos
- Sodium parte del núcleo de PHP,
- Ensanchamiento del tipo de parámetros.
1. Nuevo tipo object
Anteriormente la sentencia object
se usaba para convertir un tipo de datos a otros por ejemplo, un arreglo a un objecto de la clase sdtClass y/o viceversa, PHP 7.2 introduce el tipo de de datos object que puede usarse para especificar el tipo de parámetro que recibe una función y/o para el tipo de datos que devuele una función.
<?php
function test(object $obj): object
{
echo 'Param is type of: ', gettype($obj), nl2br("\n");
return new SplQueue();
}
$result = test(new StdClass());
echo 'Return is type of: ', gettype($result), nl2br("\n");
// Imprime
// Param is type of: object
// Return is type of: object
2. Carga de extensiones por nombre
Ahora no es necesario especificar la extensión del fichero (.so para Unix, .dll para Windows) cuando se carga una extensión permitiendo mayor portabilidad en el fichero de configuración de php (php.ini)
3. Sobre carga de métodos abstractos
Ahora una clase abstracta que hereda de otra clase abstracta puede modificar/sobreescribir un método abstracto de su clase padre.
<?php
abstract class A
{
abstract function test(string $s);
}
abstract class B extends A
{
abstract function test($s) : int;
}
Nótese que la siguiente forma de sobre carga no es permitida.
<?php
abstract class A
{
abstract function test($s);
}
abstract class B extends A
{
abstract function test(string $s) : int;
}
El ejemplo anterior da el siguiente mensaje de error
Fatal error: Declaration of B::test(string $s): int must be compatible with A::test($s)
4. Sodium parte del núcleo de PHP
Sodium es una librería moderna y fácil de usar que permite el cifrado, descifrado, firmas, hashing de contraseñas y más… ahora la extensión para PHP forma parte del núcleo del lenguaje de programación.
5. Ensanchamiento del tipo de parámetros
Ahora una clase hija puede omitir el tipo de parámetros al sobreescribir o implementar un método de la clase padre o interfaz respectivamente.
<?php
interface A
{
public function test(array $input);
}
class B implements A
{
public function test($input) {}
}
Para ver todos los cambios introducidos por PHP-7.2, consulte Migrar de PHP 7.1.x a PHP 7.2.x