PHP 8 en ocho piezas de código

PHP 8 tiene muchas características nuevas, en esta lista veremos las más destacadas.

Descargo de responsabilidad: el enlace a este artículo en inglés ya estaba en la publicación del último resumen de PHP. Si conoce el idioma lo suficiente, puede valer la pena ir al original, hay muchas notas al pie de página en otros artículos en inglés.

Hora


use \Support\Attributes\ListensTo;

class ProductSubscriber
{
    <<ListensTo(ProductCreated::class)>>
    public function onProductCreated(ProductCreated $event) { /* … */ }

    <<ListensTo(ProductDeleted::class)>>
    public function onProductDeleted(ProductDeleted $event) { /* … */ }
}

En lugar de docblock, atributos.

Sí, lo sé, la sintaxis puede no ser la que deseaba o esperaba. Quizás prefiera @, @: o docblocks, o algo más. Pero él será solo eso. Lo único que vale la pena mencionar acerca de la sintaxis es que se han discutido todas las opciones, y hay muy buenas razones por las cuales se eligió esta sintaxis. Puede leer un breve resumen de esto en el RFC , o puede leer toda la discusión sobre RFC en la lista de componentes internos .



Dos


public function foo(Foo|Bar $input): int|float;

public function bar(mixed $input): mixed;

La combinación de tipos le permite especificar varios tipos a la vez. También hay un nuevo tipo mixto que representa varios tipos al mismo tiempo.



Tres


interface Foo
{
    public function bar(): static;
}

Puede especificar estática en el tipo de retorno.



Cuatro


[JIT]
opcache.jit=5

Compilador JIT incorporado.

¿Qué es el JIT?

"JIT" significa "justo a tiempo" - "en el momento adecuado". Probablemente sepa que PHP es un lenguaje interpretado: no está compilado como un programa en C, Java o Rust. En cambio, se traduce en código de máquina, algo que el procesador entiende, en tiempo de ejecución.

"JIT" es un método que compila porciones de código en tiempo de ejecución para que se pueda utilizar una versión compilada.

Piense en ello como una "versión en caché" del código interpretado generado en tiempo de ejecución.

Más detalladamente sobre esto ya escribió en Habré



Cinco


$triggerError = fn() => throw new MyError();

$foo = $bar['offset'] ?? throw new OffsetDoesNotExist('offset');

throw se puede usar en expresiones.



Seis


try {
    // Something goes wrong
} catch (MySpecialException) {
    Log::error("Something went wrong");
}

Puede omitir la variable de excepción si no la necesita.



Siete


public function(
    string $parameterA,
    int $parameterB,
    Foo $objectfoo,
) {
    // …
}

Puede especificar una coma al final de la lista de parámetros.



Ocho


str_contains('string with lots of words', 'words');

str_starts_with('haystack', 'hay');

str_ends_with('haystack', 'stack');

Nuevas funciones de cadena. Creo que su nombre habla por sí mismo.
No nos engañemos: 8 bloques de código no son suficientes para resumir todas las grandes novedades en PHP 8. Entonces, agreguemos algunas más.



Nueve


function bar(Stringable $stringable) { /* … */ }

Una nueva interfaz Stringable que se agrega automáticamente a las clases que implementan el método __toString ().



Diez


$object::class

Llamando a :: clase directamente desde el objeto.



All Articles