PHP 8 Alpha: Novidades da versão

Novidades do PHP 8

No último artigo sobre PHP, falamos sobre o PHP 8.

Nesse artigo, falamos sobre o que de novo o PHP 8 vai trazer, especialmente o JIT. O JIT não é a única novidade maior, mas também o union types, atributos, entre outras coisas.

Neste artigo, vou mostrar o que de novo, exemplos de código, que podemos utilizar com esta nova versão.

Union Types

Graças ao dinamismo do PHP nesta nova versão, podemos ter dois tipos de dados a serem retornados de uma função, tal como dois tipos de entrada na função:

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

Atributos

Os atributos, conhecidos também como anotações noutras linguagens, e adicionam possibilidade de ter meta dados nas classes:

use App\Attributes\ExampleAttribute;

@@ExampleAttribute
class Foo
{
    @@ExampleAttribute
    public const FOO = 'foo';
 
    @@ExampleAttribute
    public $x;
 
    @@ExampleAttribute
    public function foo(@@ExampleAttribute $bar) { }
}
@@Attribute
class ExampleAttribute
{
    public $value;
 
    public function __construct($value)
    {
        $this->value = $value;
    }
}

Propriedades do constructor

Neste nova versão do PHP, podemos declarar os atributos no nosso construtor, sem precisar de declarar os mesmos dentro da classe, fora e antes do construtor.

<?php
class User
{
     public function __construct(
                  public string $name;
                  public int $type;
     ) {}
}

Novo tipo de retorno “static”

O PHP 8 vai permitir agora (de forma válida), ter um tipo retorno como “static”:

<?php
Class Player
{
    Public function type(): static
    {
        Return new static();
    }
}

$player = new Player();
$player->type();

Novo tipo “mixed”

Trabalhar com entradas mistas de tipos dentro de uma função, que alguns casos, maioritariamente quando precisamos de criar funções mais dinâmicas, para tratamentos de dados, agora já é possível. Utilizando o tipo “mixed” da variável de entrada da função, podemos receber todo o tipo de dados nessa variável.

Por outros palavras, deixamos de obrigados a declarar o tipo de variáveis de entrada (string, int, bool…)

<?php
function helloWorld (mixed $name): mixed
{
	Return $name;
}

Recolher ::class

Um recurso que pode ser útil, é o facto de podermos recolher a class, sem termos de recorrer ao get_class().

<?php
Class Object {}
$obj = new Object();
// vai retornar o tipo de objeto
var_dump($obj::class);

Try/Catch sem declarar a varivel da excepção

Ao criar um Try/Catch, nas versões anteriores de PHP, forçados a declarar a variável de “catch”. Caso não fosse utilizada, ficava por lá perdida. Nesta nova versão, não precisamos de declarar a mesma:

<?php
…
Try {
	Throw new Exception(“error”);
} catch (Throwable) {
	Var_dump(“Execution”);
}
…

Nova função “str_contains()”, “str_starts_with” e “str_ends_with”

Para quem usar os Helpers do Laravel, certamente está habituado a ter a possibilidade de usar o “contains” do helper Str”. Nesta nova versão, o PHP apresenta esta nova função, que nos vai permitir validar se determinado valor está presente na variável pretendida, sem precisar do strpos.

<?php 
$var1 = “Hello World!”;
$var2 = “Hello”;

if (str_contains($var1, $var2)) {
	Echo “The value exists!”;
}

As outras duas novas funções, também envolvendo as string, iremos poder validar se a string começa e termina com determinado valor:

<?php
$var = “Why are you using hello world?”;
if (str_starts_with($var1, ‘Why’)) {
	Echo “Begins with value!”;
}
if (str_ends_with($var1, ‘world?)) {
	Echo “Ends with value!”;
}

Traits com métodos Abstratos melhorados

Anteriormente aqui no blog, criei um artigo sobre PHP: Traits, e esta nova versão trás também melhoras neste sentido. Esta melhor implica a adição de métodos abstractos, para além das classes abstractas.

<?php
Trait MyTrait {
	Abstract public function hello(int $value): string;
}
Class TestTrait
{
	Use MyTrait;
	Public function test(int $value): string
	{
	      Return $value;
        }
}

Conclusão

A nova versão do PHP trás melhoras muito bem vindas. Apesar de ainda estar em desenvolvimento, já mostra um trabalho muito bom de aperfeiçoamento, com muitas novidades importante, que certamente iram facilitar a vida ao desenvolvedores.

Mais desta serie

Continua a acompanhar a nossa serie sobre PHP. Acompanha a página no Facebook, para ficares sempre a par das novidades sobre esta e outras serie, produtos, entre outros temas.

Podes também ver todos os código que disponibilizo aqui no blog, entre outras coisas, na minha página no Github.