Dicas de tipo PHP

Resumo : neste tutorial, você aprenderá como usar dicas de tipo PHP para declarar os tipos de parâmetros de função e valores de retorno.

Introdução às dicas de tipo PHP

PHP é uma linguagem de tipagem dinâmica. Ao definir uma função , você não precisa declarar tipos para parâmetros . Por exemplo:

<?php

function add($x, $y)
{
    return $x + $y;
}

$result = add(1,2);
echo $result; // 3Linguagem de código:  PHP  ( php )

A add()função aceita dois argumentos e retorna a soma deles. Neste exemplo, passamos dois inteiros para a add()função e obtemos o resultado como um inteiro.

Se você passar dois números de ponto flutuante para a add()função, obterá a soma dos floats , que é um número de ponto flutuante:

<?php

function add($x, $y)
{
    return $x + $y;
}

$result = add(1.0,2.5);
echo $result; // 3.5Linguagem de código:  PHP  ( php )

O mais interessante é que você pode passar um número inteiro e uma string numérica para a add()função, ela retornará um número inteiro:

<?php

function add($x, $y)
{
    return $x + $y;
}

$result = add(1,'2');
echo $result; // 3Linguagem de código:  PHP  ( php )

Nesse caso, a add()função força implicitamente a string numérica '2'em um número inteiro 2por causa do operador +. Se o PHP não conseguir forçar o argumento da string em um número inteiro, ocorrerá um erro. Por exemplo:

<?php

function add($x, $y)
{
    return $x + $y;
}

$result = add('Hi','There');
echo $result;Linguagem de código:  PHP  ( php )

Erro:

Fatal error: Uncaught TypeError: Unsupported operand types: string + string in ...Linguagem de código:  PHP  ( php )

Para impor os tipos de parâmetros de função e valor de retorno, você pode usar dicas de tipo.

Observe que o PHP também permite que você use dicas de tipo para propriedades e métodos de classe que você aprenderá no tutorial de programação orientada a objetos PHP .

Dicas de tipo PHP para parâmetros de função

As dicas de tipo garantem que o PHP verificará o tipo de valor no momento da chamada e lançará um TypeErrorse houver uma incompatibilidade.

Para adicionar uma dica de tipo a um parâmetro, coloque um tipo na frente dele assim:

<?php

function my_function(type $param1, type param2, ...) {
   // ...
}Linguagem de código:  PHP  ( php )

No PHP 5, você pode usar array, callablee class para dicas de tipo. No PHP 7+, você também pode usar tipos escalares como bool, float, inte string.

O seguinte define a add()função que aceita dois inteiros:

<?php

function add(int $x, int $y)
{
    return $x + $y;
}

$result = add(1,2);
echo $result;  // 3Linguagem de código:  PHP  ( php )

No entanto, se você passar dois pontos flutuantes, obterá o resultado como um número inteiro:

<?php

function add(int $x, int $y)
{
    return $x + $y;
}

$result = add(1,2.5);
echo $result; // 3Linguagem de código:  PHP  ( php )

Nesse caso, o PHP força implicitamente 2.5um número inteiro ( 2) antes de calcular a soma. Portanto, o resultado é um número inteiro.

Por padrão, o PHP força um valor do tipo compatível na declaração de tipo escalar esperada, se possível. Para impor o valor com um tipo que corresponda à declaração de tipo, você precisa declarar a digitação estrita .

Dicas de tipo PHP para o valor de retorno da função

Para especificar o tipo de um valor de retorno para uma função, adicione o tipo após o cabeçalho da função assim:

<?php

function my_function(type $param1, type $param2, ...) : type 
{
    // ..
}Linguagem de código:  PHP  ( php )

O exemplo a seguir define a add()função que aceita dois inteiros e retorna um inteiro:

<?php

function add(int $x, int $y): int
{
    return $x + $y;
}

echo add(10, 20);Linguagem de código:  PHP  ( php )

A partir do PHP 7.0, se uma função não retornar um valor, você usa o voidtipo. Por exemplo:

<?php

function dd($data):void
{
    echo '<pre>';
    var_dump($data);
    echo '</pre>';
    die;
}Linguagem de código:  PHP  ( php )

O tipo de união

A partir do PHP 8.0, se uma função retornar um valor de vários tipos, você poderá declará-la como um tipo de união. Por exemplo:

<?php

function add($x, $y): int | float
{
    return $x * $y;
}

echo add(10, 20); // 200 (int) 
echo add(1.5, 2.5); // 3.75 (float)Linguagem de código:  PHP  ( php )

Neste exemplo, a add()função retorna um número inteiro ou de ponto flutuante, dependendo dos tipos de argumentos.

O tipo misto

Se uma função retornar um valor de vários tipos, você poderá usar o tipo misto. O tipo misto significa um dos vários tipos. O tipo misto. É equivalente ao seguinte tipo de união:

object|resource|array|string|int|float|bool|nullLinguagem de código:  PHP  ( php )

O misto está disponível desde o PHP 8.0.0.

Por exemplo, a função interna filter_var() usa o tipo de união (array|int) e o tipo misto como dicas de tipo:

filter_var(mixed $value, int $filter = FILTER_DEFAULT, array|int $options = 0): mixedLinguagem de código:  PHP  ( php )

O tipo anulável

O seguinte define uma função que aceita uma string e retorna a letra maiúscula dessa string:

<?php


function upper(string $str): string
{
    return strtoupper($str);
}
Linguagem de código:  HTML, XML  ( xml )

Se você passar um argumento com null, receberá um erro:

<?php

function upper(string $str): string
{
    return strtoupper($str);
}

$str = null;
echo upper($str);Linguagem de código:  HTML, XML  ( xml )

Erro:

Fatal error: Uncaught TypeError: Argument 1 passed to upper() must be of the type string, null givenLinguagem de código:  texto simples  ( texto simples )

Para corrigir isso, você pode tornar o parâmetro $str anulável assim:

<?php

function upper(?string $str): string
{
    return strtoupper($str);
}

$str = null;
echo upper($str);Linguagem de código:  HTML, XML  ( xml )

O tipo anulável foi introduzido no PHP 7.1.

O PHP permite que você marque as declarações de tipo e retorne valores como anuláveis ​​prefixando o nome do tipo com um ponto de interrogação ( ?).

No exemplo acima, adicionamos o ?ao tipo string do $strparâmetro. O ?stringpermite que você passe um argumento de string ou nulo.

Observe que o tipo misto já inclui o tipo nulo. Portanto, você não precisa incluir uma mistura anulável assim:

? mixed

Além disso, fazer isso resultará em um erro.

Resumo

  • Use dicas de tipo PHP para parâmetros de função e tipos de retorno.
  • Use voidtype se a função não retornar nenhum valor.
  • Use mixedtipo ou tipo de união se o parâmetro de função ou o valor de retorno da função for esperado de vários tipos.
  • Para tornar um tipo anulável, coloque um ponto de interrogação ( ?type) no prefixo do tipo.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *