PHP 7

Strict Types e novos tipos de declaração no PHP 7

Por em

O PHP 7 introduziu mais quatro tipos de dados para a declaração de parâmetros de funções e métodos. Vamos lá!!

Antes de irmos aos exemplos, precisamos entender um outro conceito, o strict_types.

Por padrão todos os arquivos PHP estão em modo “fraco” de checagem de tipo, para entender melhor veja o exemplo abaixo:

Percebam que nossa função foi assinada para receber um parâmetro $num1 do tipo int, e retornar também um int, sendo a soma do parâmetro passado mais 1, porém a chamada da função é feita passando a string ‘1’ e mesmo assim o PHP conseguiu interpretar, converter (string -> int) e retornar um int, que neste caso foi o número 2. E isso só foi possível devido estarmos com o modo fraco de tipo de checagem. Interessante não ?

Agora vamos ativar o modo strict_types e fazer o mesmo exemplo anterior:

A única mudança feita foi a inclusão do comando declare(strict_types=1), ou seja, a partir deste momento, a checagem de tipo será feita, e é como se estivéssemos dizendo para o PHP para utilizar o modo “forte” de checagem de tipo. O exemplo acima irá produzir um fatal error, como abaixo:

Agora que já sabemos como utilizar o modo “forte” de checagem de tipo do PHP, vamos ver quais são os 4 tipos de dados adicionados e que agora são permitidos como declaração de tipo de parâmetro de funções ou métodos.

Os tipos introduzidos na versão 7 do PHP, foram: int, float, string e bool. Vamos ver alguns exemplos abaixo:

Vejam que acima, temos uma classe Actor e dois métodos getNameWithPrefix(string $sufixForName) : string e getSalaryWithCommission(float $v) : float, percebam que cada uma delas declara um parâmetro string e float respectivamente, e logo após instanciarmos a classe, fazemos as chamadas a estes métodos passando os parâmetros corretamente. Porém, vamos fazer uma chamada ao método getSalaryWithCommission(float $v) : float passando como parâmetro um int:

Opa! Isso deveria ter dado erro já que a função deveria ter recebido um float e o foi passado um int. Bem neste caso não, ja que int são aceitos para argumentos float, porém o contrário não será aceito.

Percebam que este recurso será muito útil principalmente para as documentações de códigos, já que agora temos uma forma de obrigar o tipo de dado que é passado para uma função ou método.

Espero que tenham gostado, um abraço e até a próxima!

  • Victor Magalhães Pacheco

    ótimo artigo amigo!
    Obrigado por compartilhar.

  • Cleiton

    Muito bom mesmo!! Estou gostando muito desses posts referentes ao PHP 7! Parabéns!

  • Marcos Wênyo

    Muito útil mesmo! Parabéns!

  • Amarilis

    Muito Bom!!!!!! 😉

  • Paulo

    Muito bom. Parabéns.

  • Finalmente!

  • Mhayk

    Valeu pela compilação!!

  • Layer

    sim… isso é um teste