Sobes.tech
Junior

Qual sistema de tipos é aplicado no PHP?

sobes.tech IA

Resposta da IA

O PHP utiliza um sistema de tipos dinâmico e fraco.

  • Tipagem dinâmica: O tipo de uma variável é determinado em tempo de execução durante a atribuição de um valor, não na declaração. A variável pode conter valores de diferentes tipos ao longo do seu ciclo de vida.

    <?php
    $variable = 10;      // inteiro
    echo gettype($variable) . "\n";
    
    $variable = "olá"; // string
    echo gettype($variable) . "\n";
    ?>
    
  • Tipagem fraca (não estrita): PHP converte automaticamente os tipos de dados quando necessário, por exemplo, em operações aritméticas ou comparações. Isto pode levar a resultados inesperados se os tipos não forem controlados explicitamente.

    <?php
    echo "10" + 5; // Saída: 15 (a string "10" é convertida em número)
    echo "\n";
    if ("5" == 5) { // Comparação de "5" e 5 com conversão automática de tipos
        echo "Igual"; // Saída: Igual
    }
    ?>
    

No entanto, a partir do PHP 7, foi introduzida a possibilidade de usar:

  • Declarações de tipos escalares: Permitem indicar o tipo esperado de argumentos de funções, valores de retorno e propriedades de classes (PHP 7.4+).

    <?php
    declare(strict_types=1); // Modo estrito de tipos para o ficheiro atual
    
    function addNumbers(int $a, int $b): int {
        return $a + $b;
    }
    
    // addNumbers("1", 2); // Isto provocará um TypeError em modo estrito
    echo addNumbers(1, 2);
    ?>
    
  • Declarações de tipos de retorno: Indicam o tipo de dado que uma função deve devolver.

  • Declarações de tipos de propriedade: Indicam o tipo de dado que uma propriedade de classe pode conter.

  • Declarações de tipos combinados: Permitem indicar que uma variável, argumento, propriedade ou valor de retorno pode ter um de vários tipos (PHP 8+).

  • Declarações de tipos intersectados: Permitem indicar que uma variável, argumento, propriedade ou valor de retorno deve ser uma instância de todas as interfaces ou classes indicadas (PHP 8.1+).

  • Tipo mixed: Indica que um elemento pode ser de qualquer tipo (PHP 8+).

  • Tipo never: Indica que uma função ou método nunca devolve valor (ou seja, termina a execução do script ou lança uma exceção) (PHP 8.1+).

A utilização destas funcionalidades permite aproximar o PHP de uma tipagem estrita, melhorando a legibilidade do código e facilitando a depuração. A declaração declare(strict_types=1); no início do ficheiro ativa o modo estrito de tipos para tipos escalares, onde não ocorre conversão automática de tipos ao chamar funções e métodos.