PHP 8 se lanzó a fines de noviembre de 2020. Es una nueva versión importante que actualiza el lenguaje con características adicionales y mejoras de rendimiento.

En este artículo, veremos ocho de las mejoras más importantes que ofrece PHP 8. La lista completa de adiciones y cambios se puede encontrar en la documentación oficial. Los documentos también incluyen una guía de migración completa para usar al actualizar proyectos desde PHP 7.4.

1. Atributos

Los atributos, también conocidos como anotaciones en otros idiomas, proporcionan un mecanismo para agregar metadatos a su base de código. Los atributos se pueden utilizar con clases, métodos, funciones y propiedades. Es más fácil trabajar con ellos que el enfoque docblock adoptado por muchos proyectos PHP 7.

Los atributos se definen como clases simples, anotadas con el Attribute de atributo integrado de PHP:

#[Attribute]
class V2NAttribute {
 
    protected string $value;
 
    public function __construct(string $value) {
        $this ->; value = $value;
    }
 
    public function getValue() : string {
        return $this ->; value;
    }
 
}

Luego se pueden adjuntar a entidades dentro de su base de código:

#[V2NAttribute("Example")]
class V2NClass {
    // ...
}

Los atributos se recuperan a través de la API de Reflection. Puede inspeccionar y construir atributos definidos en una clase, método u otro componente de la base de código. Es probable que los atributos sean más útiles dentro de los marcos y bibliotecas, donde ayudarán a abstraer el mapeo único de los componentes de la aplicación, como las definiciones de ruta y los cables de inyección de dependencia.

2. Argumentos nombrados

Los argumentos con nombre le permiten pasar parámetros a métodos y funciones utilizando una construcción similar a una matriz. Esto hace que sea más sencillo omitir parámetros opcionales y pasarlos fuera de orden.

function foo(?string $a=null, ?string $b=null, ?string $c=null) : void;

En PHP 7, llamar a la función anterior mientras se pasa el valor "demo" a $c requería la siguiente invocación:

foo(null, null, "demo");

En PHP 8, se puede utilizar la siguiente sintaxis en su lugar:

foo(c: "demo");

Esto hace que las llamadas a funciones con muchos argumentos opcionales sean menos repetitivas y más fáciles de mantener.

3. Promoción de propiedades de constructor

Rellenar las propiedades de una clase con valores iniciales es uno de los roles más frecuentes de un constructor. Un código similar al siguiente es común en las bases de código PHP 7:

class Example {
 
    protected ?string $Property;
 
    public function __construct(?string $Property=null) {
        $this ->; Property = $Property;
    }
 
}

PHP 8 agrega soporte para la promoción de propiedades de constructor, una sintaxis abreviada que le permite combinar la definición de propiedad, la escritura y la población en línea en la firma del constructor. El ejemplo anterior podría reescribirse de la siguiente manera:

class Example {
    public function __construct(
        protected string $Property=null
    )
}

Este estilo elimina la repetición. Su uso hace que sea más fácil agregar propiedades de constructor adicionales en el futuro, reduciendo la cantidad de secciones de código que necesitaría modificar.

4. Tipos de unión

El sistema de tipos de PHP continúa desarrollándose con PHP 8. Ahora es posible insinuar tipos como una «unión» de dos o más tipos, donde el valor del tipo puede derivar de cualquiera de los tipos en la unión.

public function foo(string|int $bar) : int|float;

En el ejemplo artificial anterior, la función foo() acepta tanto cadenas como enteros. Devolverá un número entero o un flotante.

En la práctica, es probable que esta habilidad sea más útil cuando se aplica a propiedades y parámetros de métodos; es una buena forma de aceptar una variedad de tipos de entrada y normalizar a un tipo de salida único bien definido.

5. Expresión match

La nueva expresión match es una alternativa más segura que el conocido switch. No requiere el uso de sentencias case y break, admite condiciones combinadas y devuelve un valor en lugar de ingresar un nuevo bloque de código. La coerción de tipos está deshabilitada, por lo que 1.0 (float) no se considera equivalente a "1.0" (string), a diferencia de cuando se usa switch.

Aquí hay un típico switch en PHP 7:

switch (1.0) {
    case 1.0:
        $result = "Float!";
        break;
    case "foo":
    case "bar":
        $result = "foobar!";
        break;
}

Y así es como podría verse el mismo código con PHP 8:

$result = match (1.0) {
    1.0 =>; "Float!",
    "foo", "bar" =>; "foobar!"
}

Una vez más, el nuevo enfoque es mucho más conciso. Una advertencia para señalar es que los valores de sintaxis de condiciones combinadas no se definen dentro de un array, sino más bien como un simple conjunto delimitado por comas, similar a llamar a una función.

6. El operador «Nullsafe»

Otro concepto tomado de otros lenguajes, PHP 8 ahora admite la verificación de nulos en una línea con cortocircuito automático. Puede crear una cadena de comprobaciones que abortará y devolverá un valor null cuando falle la evaluación de cualquier elemento.

En PHP 7:

$photo = null;
if ($user !== null) {
    if ($user ->; profile !== null) {
        if ($user ->; profile ->; getPhoto() !== null) {
            $photo = $user ->; profile ->; getPhoto() ->; getPath();
        }
    }
}

En PHP 8:

$photo = $user? ->; profile? ->; getPhoto()? ->; getPath();

PHP 8 nuevamente proporciona una solución más simple, que elimina el anidamiento. Esto da como resultado una cantidad considerablemente menor de código para probar y mantener.

7. Sistema de tipo más estricto

Ya hemos visto cómo los tipos de unión agregan otra capa de flexibilidad al sistema de tipos PHP 8. Una serie de cambios adicionales en esta área mejoran el rigor y la coherencia con la que se aplica la verificación de tipos.

Las comparaciones de string a número son ahora más sensatas. 0 (integer) ya no es equivalente a "" (string vacío) y comparaciones como 123 == "123abc" ahora se evalúan como false, no true. Estas alteraciones ayudan a reducir la posibilidad de errores de comparación dentro de su base de código, aunque es posible que se requiera algo de trabajo para garantizar que los proyectos heredados sean compatibles.

El sistema de tipos también ha ganado un tipo mixed explícito (para indicar que cualquier tipo de valor es compatible), así como un tipo de retorno static (que admite enlaces estáticos tardíos). En otros lugares, las firmas de métodos abstractos en rasgos ahora se verifican correctamente.

En conjunto, estos cambios hacen progresar el soporte de PHP para la programación fuertemente tipada. El uso constante de sugerencias de tipo elimina muchos errores que pueden existir en lenguajes de tipado débil, lo que brinda a los desarrolladores una mayor confianza en que el código funciona según lo previsto.

8. JIT

La entrada final en nuestra lista es una capacidad más detrás de escena, en lugar de una función de lenguaje. PHP 8 agrega soporte para la compilación Just-In-Time, que tiene el potencial de mejorar significativamente el rendimiento.

Los scripts de larga ejecución que alojan tareas repetitivas son los que tienen más probabilidades de beneficiarse de la compilación JIT. Los benchmarks indican que la mejora será menos pronunciada en las aplicaciones web, donde PHP se encuentra con mayor frecuencia. Sin embargo, la adición del JIT puede ayudar a PHP a extenderse a otras áreas de programación, mejorando el atractivo y la versatilidad general del lenguaje.

El JIT debe habilitarse usando nuevas configuraciones en el archivo de configuración php.ini. En la documentación se puede encontrar orientación detallada sobre los valores disponibles y sus efectos; sin embargo, se recomienda lo siguiente como un valor predeterminado general:

opcache.enable=1
opcache.jit_buffer_size=100M
opcache.jit=1255

Conclusión

Solo hemos analizado ocho de las adiciones y alteraciones más importantes en PHP 8. Vale la pena revisar las notas de la versión oficial antes de comenzar a usar PHP 8 en sus proyectos.

Aunque la mayoría de los cambios son compatibles con versiones anteriores, se incluyen las mejoras del sistema de tipos y los cambios dentro de la biblioteca estándar. Puede encontrar la guía de migración completa en el sitio de documentación de PHP.

En V2Networks ya contamos con la última versión de PHP 8 disponible para todos tus proyectos. Si la deseas activar, lo puedes hacer desde el apartado Administrador MultiPHP en tu cPanel.

Comentarios desactivados en 8 nuevas características de la nueva versión de PHP 8

V2Networks es una empresa dedicada al Hosting de sitios web y aplicaciones críticas. Nuestro objetivo es ofrecer soluciones IT rentables de alta fiabilidad con un servicio al cliente superior.

Telefóno:+56 2 2570 9868
Sitio web:www.v2networks.cl
Dirección Comercial:Av. Alonso de Córdova #5870, Las Condes, Santiago, Chile

Partners

Los precios no incluyen IVA, este es calculado automáticamente al momento de la compra. Todos los derechos reservados. V2Networks ®; RUT: 76.237.835-3.

© Copyright 2021 V2Networks SpA.