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; // 3
Linguagem 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.5
Linguagem 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; // 3
Linguagem de código: PHP ( php )
Nesse caso, a add()
função força implicitamente a string numérica '2'
em um número inteiro 2
por 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 TypeError
se 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
, callable
e class para dicas de tipo. No PHP 7+, você também pode usar tipos escalares como bool
, float
, int
e 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; // 3
Linguagem 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; // 3
Linguagem de código: PHP ( php )
Nesse caso, o PHP força implicitamente 2.5
um 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 void
tipo. 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|null
Linguagem 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): mixed
Linguagem 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 given
Linguagem 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 $str
parâmetro. O ?string
permite 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
void
type se a função não retornar nenhum valor. - Use
mixed
tipo 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.