Do not speak Portuguese? Translate this site with Google or Bing Translator
O modo declarar strict_types

Posted on: April 04, 2023 03:58 PM

Posted by: Renato

Categories: Laravel PHP

Views: 510


# 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.

 

function dump(int $value): void  
{  
 var_dump($value);  
}  
dump('13.37');
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.

declare(strict_types=1)
function dump(int $value): void  
{  
 var_dump($value);  
}  
dump('13.37');
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
 


2

Share

Donate to Site


About Author

Renato

Developer

Add a Comment

Blog Search


Categories

OUTROS (15) Variados (109) PHP (130) Laravel (157) Black Hat (3) front-end (28) linux (113) postgresql (39) Docker (26) rest (5) soap (1) webservice (6) October (1) CMS (2) node (7) backend (13) ubuntu (54) devops (25) nodejs (5) npm (2) nvm (1) git (8) firefox (1) react (6) reactnative (5) collections (1) javascript (6) reactjs (7) yarn (0) adb (1) Solid (2) blade (3) models (1) controllers (0) log (1) html (2) hardware (3) aws (14) Transcribe (2) transcription (1) google (4) ibm (1) nuance (1) PHP Swoole (5) mysql (31) macox (4) flutter (1) symfony (1) cor (1) colors (2) homeOffice (2) jobs (3) imagick (2) ec2 (1) sw (1) websocket (1) markdown (1) ckeditor (1) tecnologia (14) faceapp (1) eloquent (14) query (4) sql (40) ddd (3) nginx (9) apache (4) certbot (1) lets-encrypt (3) debian (11) liquid (1) magento (2) ruby (1) LETSENCRYPT (1) Fibonacci (1) wine (1) transaction (1) pendrive (1) boot (1) usb (1) prf (1) policia (2) federal (1) lucena (1) mongodb (4) paypal (1) payment (1) zend (1) vim (4) ciencia (6) js (1) nosql (1) java (1) JasperReports (1) phpjasper (1) covid19 (1) saude (1) athena (1) cinnamon (1) phpunit (2) binaural (1) mysqli (3) database (42) windows (6) vala (1) json (2) oracle (1) mariadb (4) dev (12) webdev (24) s3 (4) storage (1) kitematic (1) gnome (2) web (2) intel (3) piada (1) cron (2) dba (18) lumen (1) ffmpeg (2) android (2) aplicativo (1) fedora (2) shell (4) bash (3) script (3) lider (1) htm (1) csv (1) dropbox (1) db (3) combustivel (2) haru (1) presenter (1) gasolina (1) MeioAmbiente (1) Grunt (1) biologia (1) programming (22) performance (3) brain (1) smartphones (1) telefonia (1) privacidade (1) opensource (3) microg (1) iode (1) ssh (3) zsh (2) terminal (3) dracula (1) spaceship (1) mac (2) idiomas (1) laptop (2) developer (37) api (4) data (1) matematica (1) seguranca (2) 100DaysOfCode (9) hotfix (1) documentation (1) laravelphp (10) RabbitMQ (1) Elasticsearch (1) redis (2) Raspberry (4) Padrao de design (4) JQuery (1) angularjs (4) Dicas (40) Kubernetes (2) vscode (2) backup (1) angular (3) servers (2) pipelines (1) AppSec (1) DevSecOps (4) rust (1) RustLang (1) Mozilla (1) algoritimo (1) sqlite (1) Passport (1) jwt (4) security (2) translate (1) kube (1) iot (1) politica (2) bolsonaro (1) flow (1) podcast (1) Brasil (1) containers (2) traefik (1) networking (1) host (1) POO (2) microservices (2) bug (1) cqrs (1) arquitetura (2) Architecture (3) sail (3) militar (1) artigo (1) economia (1) forcas armadas (1) ffaa (1) autenticacao (1) autorizacao (2) authentication (4) authorization (2) NoCookies (1) wsl (4) memcached (1) macos (2) unix (2) kali-linux (1) linux-tools (5) apple (1) noticias (2) composer (1) rancher (1) k8s (1) escopos (1) orm (1) jenkins (4) github (5) gitlab (3) queue (1) Passwordless (1) sonarqube (1) phpswoole (1) laraveloctane (1) Swoole (1) Swoole (1) octane (1) Structurizr (1) Diagramas (1) c4 (1) c4-models (1) compactar (1) compression (1) messaging (1) restfull (1) eventdrive (1) services (1) http (1) Monolith (1) microservice (1) historia (1) educacao (1) cavalotroia (1) OOD (0) odd (1) chatgpt (1) openai (3) vicuna (1) llama (1) gpt (1) transformers (1) pytorch (1) tensorflow (1) akitando (1) ia (1) nvidia (1) agi (1) guard (1) multiple_authen (2) rpi (1) auth (1) auth (1) livros (2) ElonMusk (2) Oh My Zsh (1) Manjaro (1) BigLinux (2) ArchLinux (1) Migration (1) Error (1) Monitor (1) Filament (1) LaravelFilament (1) replication (1) phpfpm (1) cache (1) vpn (1) l2tp (1) zorin-os (1) optimization (1) scheduling (1) monitoring (2) linkedin (1) community (1) inteligencia-artificial (2) wsl2 (1) maps (1) API_KEY_GOOGLE_MAPS (1) repmgr (1) altadisponibilidade (1) banco (1) modelagemdedados (1) inteligenciadedados (4) governancadedados (1) bancodedados (2) Observability (1) picpay (1) ecommerce (1) Curisidades (1) Samurai (1)

New Articles



Get Latest Updates by Email