Sobes.tech
Junior

Como funciona a tipagem dinâmica em PHP?

sobes.tech IA

Resposta da IA

O PHP é uma linguagem com tipagem dinâmica e fraca.

  • Tipagem dinâmica: O tipo de uma variável é determinado em tempo de execução com base no valor atribuído a ela, e não declarado explicitamente com antecedência.
  • Tipagem fraca: O PHP pode realizar conversões de tipos implícitas (conversão contextual), o que às vezes pode levar a comportamentos inesperados ao comparar ou realizar operações entre valores de tipos diferentes.

Exemplos:

  1. Alteração do tipo de variável:
    <?php
    $variable = 123;    // int
    $variable = "olá"; // string
    $variable = [1, 2]; // array
    ?>
    
  2. Conversão implícita de tipos na comparação:
    <?php
    var_dump(10 == "10"); // bool(true) - a string "10" é convertida para o número 10
    var_dump(0 == false); // bool(true) - false é convertido para o número 0
    var_dump("abc" == 0); // bool(true) - a string "abc" é convertida para o número 0, pois não começa com um número
    ?>
    
  3. Uso de comparação estrita para evitar conversão implícita:
    <?php
    var_dump(10 === "10"); // bool(false) - comparado tanto em valor quanto em tipo
    var_dump(0 === false); // bool(false)
    var_dump("abc" === 0); // bool(false)
    ?>
    

Embora a tipagem dinâmica ofereça flexibilidade e acelere o desenvolvimento nas fases iniciais, ela pode levar a erros que só são detectados em tempo de execução. Para melhorar a confiabilidade do código, no PHP 7+ foram introduzidas declarações de tipos (type declarations) e modo estrito de tipos (strict types).

<?php
declare(strict_types=1); // Ativa o modo estrito de tipos para o arquivo atual

function sum(int $a, int $b): int { // Declaração de tipos para argumentos e valor de retorno
    return $a + $b;
}

// sum(1, "2"); // Isto causará um erro de tipo (TypeError) em modo estrito

?>

As declarações de tipos e o modo estrito permitem realizar verificações de tipos na fase de análise estática ou em tempo de execução antes de chamar a função, o que contribui para escrever um código mais previsível e de fácil manutenção.