You are using an outdated browser. For a faster, safer browsing experience, upgrade for free today.

10 coisas que chegam com o PHP 8

< Bruno Couty > atualizado em 15/05/2020


Com a chegada do PHP 8 chegam também 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 vários tipos de type hinting
public function foo(Foo|Bar $input): int|float;

public function bar(mixed $input): mixed;

Existe também um novo tipo mixed que representa vários tipos em um.

  1. O tipo de retorno static na declaração 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 expressões
$triggerError = fn() => throw new MyError();

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

Não há obrigatoriedade de criar uma variável para receber a exceção se você não precisa!

try {
    // Something goes wrong
} catch (MySpecialException) {
    Log::error("Something went wrong");
}
  1. Vírgulas à direita em parâmetros? SIM!
public function(
    string $parameterA,
    int $parameterB,
    Foo $objectfoo,
) {
    // …
}
  1. Novas funções 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á é possível criar um objeto DateTime a partir de um objeto DateTimeImmutable utilizando DateTime::createFromImmutable($immutableDateTime). Todavia, fazer o inverso não era tão 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 não ocupa lugar!


Utilizamos cookies essenciais e tecnologias semelhantes de acordo com a nossa Política de Privacidade e nossos Termos e Condições de Uso. Ao continuar navegando, você concorda com esta utilização.