O PHP 8 possui muitos recursos novos. Nesta lista, veremos os mais destacados.Isenção de responsabilidade: o link para este artigo em inglês já estava no post do último resumo do PHP. Se você conhece o idioma o suficiente, pode valer a pena ir para o original, há muitas notas de rodapé em outros artigos em inglês.Tempo
use \Support\Attributes\ListensTo;
class ProductSubscriber
{
<<ListensTo(ProductCreated::class)>>
public function onProductCreated(ProductCreated $event) { }
<<ListensTo(ProductDeleted::class)>>
public function onProductDeleted(ProductDeleted $event) { }
}
Em vez de docblock, atributos.Sim, eu sei, a sintaxe pode não ser da maneira que você queria ou esperava. Talvez você prefira @, @:, ou docblocks ou qualquer outra coisa. Mas ele será exatamente isso. A única coisa que vale a pena mencionar sobre a sintaxe é que todas as opções foram discutidas e há muitas boas razões para que essa sintaxe tenha sido escolhida. Você pode ler um breve resumo disso na RFC ou ler toda a discussão sobre RFC na lista de componentes internos .
Dois
public function foo(Foo|Bar $input): int|float;
public function bar(mixed $input): mixed;
A combinação de tipos permite especificar vários tipos ao mesmo tempo. Há também um novo tipo misto que representa vários tipos ao mesmo tempo.
Três
interface Foo
{
public function bar(): static;
}
Você pode especificar estático no tipo de retorno.
Quatro
[JIT]
opcache.jit=5
Compilador JIT embutido.O que é o JIT?"JIT" significa "just in time" - "na hora certa". Você provavelmente sabe que o PHP é uma linguagem interpretada: não é compilado como um programa em C, Java ou Rust. Em vez disso, ele se traduz em código de máquina - algo que o processador entende - em tempo de execução."JIT" é um método que compila partes do código em tempo de execução para que uma versão compilada possa ser usada.Pense nisso como uma "versão em cache" do código interpretado gerado em tempo de execução.Mais detalhadamente já escrevi sobre Habré
Cinco
$triggerError = fn() => throw new MyError();
$foo = $bar['offset'] ?? throw new OffsetDoesNotExist('offset');
throw pode ser usado em expressões.
Seis
try {
} catch (MySpecialException) {
Log::error("Something went wrong");
}
Você pode omitir a variável de exceção se não precisar dela.
Sete
public function(
string $parameterA,
int $parameterB,
Foo $objectfoo,
) {
}
Você pode especificar uma vírgula no final da lista de parâmetros.
Oito
str_contains('string with lots of words', 'words');
str_starts_with('haystack', 'hay');
str_ends_with('haystack', 'stack');
Novas funções de string. Eu acho que o nome deles fala por si.Não vamos nos enganar: 8 blocos de código não são suficientes para resumir todas as grandes novidades do PHP 8. Então, vamos adicionar mais algumas.
Nove
function bar(Stringable $stringable) { }
Uma nova interface Stringable que é adicionada automaticamente às classes que implementam o método __toString ().
Dez
$object::class
Calling :: class diretamente do objeto.