Posted on: April 04, 2023 03:58 PM
Posted by: Renato
Views: 692
# O modo declarar(strict_types=1) funciona em PHP
Use declare(strict_types=1) to enable strict mode for type checking
Lembrete do PHP: O "declare(strict_types = 1);" A diretiva ativa o modo estrito. No modo estrito, apenas uma variável do tipo exato da “declaração de tipo” será aceita, ou um "TypeError" será lançado. ✅
Neste artigo vou explicar o que ele faz e por que comecei a adorar usá-lo.
## O que a tipagem estrita faz
O PHP nunca foi realmente uma linguagem com tipagem estrita. Você só tinha variáveis e poderia colocar qualquer coisa que quisesse, mas estamos lentamente obtendo mais e mais restrições de tipo que podemos usar.
A dica de tipo em parâmetros de método ou propriedades de classe é muito útil e ajuda a detectar erros de tipo antes de executar seu código. A dica de tipo baseada em classe funciona desde o PHP 5, mas a dica primitiva é bastante nova. Ao passar um tipo inesperado para uma função, o PHP tentará converter automaticamente o valor para o tipo esperado. Se strict_types tiver sido declarado, o PHP lançará uma exceção.
Usando declare(strict_types=1)irá dizer ao PHP para lançar erros de tipo quando você tentar (acidentalmente) converter valores primitivos. Dê uma olhada neste exemplo sem a declaração de tipo estrito.
{
var_dump($value);
}
dump(19.42);
A execução desse script resultará na seguinte saída.
int(13)
int(19)
Você notará que nossa função dump espera números inteiros, mesmo que demos a ela uma string em uma de nossas chamadas de função. Seu editor pode questioná-lo se você tentar fazer isso, mas ainda é um código PHP válido.
## Como habilitar tipos estritos
Ativar a tipagem estrita para valores primitivos é tão fácil quanto adicionar uma única instrução ao topo de seus arquivos PHP. Aqui está o exemplo acima com a declaração adicionada.
{
var_dump($value);
}
dump(19.42);
Running this script with the declaration will result in the following error.
Fatal error: Uncaught TypeError: dump(): Argument #1 ($value) must be of type int, string given, called in /Users/rienvanvelzen/Desktop/demo.php on line 10 and defined in /Users/rienvanvelzen/Desktop/demo.php:5
Stack trace:
#0 /Users/rienvanvelzen/Desktop/demo.php(10): dump('13.37')
#1 {main}
thrown in /Users/rienvanvelzen/Desktop/demo.php on line 5
A utilização da declaração do tipo strict_type pode ajudá-lo a apanhar bugs precocemente, restringindo o PHP ao lançamento automático de valores primitivos. Pode ser um pouco assustador quando se começa a utilizá-lo, uma vez que é necessário definir correctamente tudo desde o início.
## A (pequeno) Caveat
Há uma coisa que precisa de ter em mente quando utilizar a declaração de tipo_estrito. Só funciona para o ficheiro em que a declaração é colocada. O que significa que quando se utiliza uma classe, que tem a declaração do tipo strict_type, ainda pode resultar num valor primitivo de PHP casting. Portanto, tenha isso em mente quando quiser começar a usar isto!
Fonte
- https://www.php.net/manual/en/language.types.declarations.php#language.types.declarations.strict
- https://dev.to/rocksheep/the-way-stricttypes-works-in-php-eb7
Donate to Site
Renato
Developer