10 coisas que chegam com o PHP 8

15/05/2020 às 20:01 Bruno Couty

Com a chegada do PHP 8 chegam tambm muitas novidades. Ele est recheado de novas features para abrilhantar nossos projetos! Sendo assim, vamos apresentar algumas delas. Separamos uma bela lista para voc, vamos l:

  1. Attributes - aka annotations
use \Support\Attributes\ListensTo;

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

    <<ListensTo(ProductDeleted::class)>>
    public function onProductDeleted(ProductDeleted $event) { /*  */ }
}
  1. Union Types permitidos para vrios tipos de type hinting
public function foo(Foo|Bar $input): int|float;

public function bar(mixed $input): mixed;

Existe tambm um novo tipo mixed que representa vrios tipos em um.

  1. O tipo de retorno static na declarao interna
interface Foo
{
    public function bar(): static;
}
  1. Compilador 'just-in-time' para o PHP
[JIT]
opcache.jit=5
  1. throw pode ser utilizada em expresses
$triggerError = fn() => throw new MyError();

$foo = $bar['offset'] ?? throw new OffsetDoesNotExist('offset');
  1. Non-captureing catches

No h obrigatoriedade de criar uma varivel para receber a exceo se voc no precisa!

try {
    // Something goes wrong
} catch (MySpecialException) {
    Log::error("Something went wrong");
}
  1. Vrgulas direita em parmetros? SIM!
public function(
    string $parameterA,
    int $parameterB,
    Foo $objectfoo,
) {
    // 
}
  1. Novas funes para strings:
str_contains('string with lots of words', 'words');

str_starts_with('haystack', 'hay');

str_ends_with('haystack', 'stack');
  1. Permite chamar ::class diretamente de um objeto
$foo = new Foo();
var_dump($foo::class);
  1. Criar objetos DateTime de uma interface

J possvel criar um objeto DateTime a partir de um objeto DateTimeImmutable utilizando DateTime::createFromImmutable($immutableDateTime). Todavia, fazer o inverso no era to simples... Adicionando DateTime::createFromInterface() e DatetimeImmutable::createFromInterface() existe um modo generalizado de converter objetos DateTime e DateTimeImmutable entre si.

DateTime::createFromInterface(DateTimeInterface $other);
DateTimeImmutable::createFromInterface(DateTimeInterface $other);

Mantenha-se atualizado. O saber no ocupa lugar!