Tecnología

8 nuevas funciones principales en PHP 8 – CloudSavvy IT

8 nuevas funciones principales en PHP 8 - CloudSavvy IT

Logotipo de PHP

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 mayores mejoras que ofrece PHP 8. La lista completa de adiciones y cambios se puede encontrar dentro de documentación oficial. Los documentos también incluyen un 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. Atributos se puede utilizar con clases, métodos, funciones y propiedades. Son más fáciles de trabajar que los enfoque de docblock adoptado por muchos proyectos PHP 7.

Los atributos se definen como clases simples, anotadas con PHP incorporado Attribute atributo:

#[Attribute]
class CloudSavvyAttribute {
 
    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:

#[CloudSavvyAttribute("Example")]
class CloudSavvyClass {
    // ...
}

Los atributos son recuperado 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 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

Argumentos nombrados le permite pasar parámetros a métodos y funciones usando 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 requirió la siguiente invocación:

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

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

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 Promoción de inmuebles para constructores, una sintaxis abreviada que le permite combinar la definición de propiedad, la sugerencia de tipo 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 facilita la adición de propiedades de constructor adicionales en el futuro, lo que reduce 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 «Unión» de dos o más tipos, donde el valor del tipo puede derivar de cualquiera de los tipos de la unión.

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

En el ejemplo artificial anterior, el foo() La función 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 aceptar una variedad de tipos de entrada y normalizar a un tipo de salida único bien definido.

5. Expresión de coincidencias

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

Aquí hay un PHP 7 típico switch:

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 a señalar es que los valores de sintaxis de condiciones combinadas no se definen dentro de una matriz, 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 comprobación nula en línea con cortocircuito automático. Puede construir una cadena de controles que abortará, regresando null, cuando falla la evaluación de algún elemento.

En PHP 7:

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

Y 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 cadenas a números son ahora más cuerdo. 0 (entero) ya no es equivalente a "" (cadena vacía) y comparaciones como 123 == "123abc" ahora evalúe a falseno 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 explícito mixed tipo (para indicar que cualquier tipo de valor es compatible), así como un static tipo de retorno (compatible con enlace estático tardío). 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 con tipos débiles, 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 idioma. 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 puntos de referencia indican 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 la programación, mejorando el atractivo general y la versatilidad del lenguaje.

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

<code>opcache.enable=1
opcache.jit_buffer_size=100M
opcache.jit=1255</code>

Conclusión

Solo hemos analizado ocho de las adiciones y alteraciones más importantes en PHP 8. Vale la pena revisar el notas de lanzamiento oficiales antes de comenzar a usar PHP 8 en sus proyectos, ya que hay muchas más características menores que no hemos podido cubrir aquí.

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

Leave a Comment

You may also like

Más