PHP 8.3.4 Released!

Retornando valores

Os valores podem ser retornados utilizando a instrução opcional return. Qualquer tipo pode ser retornado, incluindo arrays e objetos. Isto faz com que as função termine sua execução imediatamente e passa o controle de volta para a linha de onde ela foi chamada. Veja a documentação da função return para maiores informações.

Nota:

Se return for omitido então o valor null será retornado.

Sintaxe do return

Exemplo #1 O uso de return

<?php
function quadrado($num)
{
return
$num * $num;
}
echo
quadrado(4); // imprime '16'.
?>

Você não pode retornar múltiplos valores a partir de uma função, mas resultados similares podem ser obtidos retornando um array.

Exemplo #2 Retornando um array para devolver vários valores

<?php
function primeiros_numeros()
{
return [
0, 1, 2];
}
// Desconstruir o array coleta cada item individualmente
[$zero, $one, $two] = primeiros_numeros();

// Anteriormente ao 7.1.0 a única alternativa era usar list()
list($zero, $one, $two) = primeiros_numeros();

?>

Para retornar uma referência de uma função, use o operador de referência & em ambas a declaração da função e quando definindo o valor para a variável.

Exemplo #3 Retornando uma referência de uma função

<?php
function &retorna_referencia()
{
return
$alguma_referencia;
}

$nova_referencia =& retorna_referencia();
?>

Para mais detalhes sobre referências, leia a seção Referências.

add a note

User Contributed Notes 4 notes

up
26
ryan dot jentzsch at gmail dot com
7 years ago
PHP 7.1 allows for void and null return types by preceding the type declaration with a ? -- (e.g. function canReturnNullorString(): ?string)

However resource is not allowed as a return type:

<?php
function fileOpen(string $fileName, string $mode): resource
{
$handle = fopen($fileName, $mode);
if (
$handle !== false)
{
return
$handle;
}
}

$resourceHandle = fileOpen("myfile.txt", "r");
?>

Errors with:
Fatal error: Uncaught TypeError: Return value of fileOpen() must be an instance of resource, resource returned.
up
24
rstaveley at seseit dot com
13 years ago
Developers with a C background may expect pass by reference semantics for arrays. It may be surprising that pass by value is used for arrays just like scalars. Objects are implicitly passed by reference.

<?php

# (1) Objects are always passed by reference and returned by reference

class Obj {
public
$x;
}

function
obj_inc_x($obj) {
$obj->x++;
return
$obj;
}

$obj = new Obj();
$obj->x = 1;

$obj2 = obj_inc_x($obj);
obj_inc_x($obj2);

print
$obj->x . ', ' . $obj2->x . "\n";

# (2) Scalars are not passed by reference or returned as such

function scalar_inc_x($x) {
$x++;
return
$x;
}

$x = 1;

$x2 = scalar_inc_x($x);
scalar_inc_x($x2);

print
$x . ', ' . $x2 . "\n";

# (3) You have to force pass by reference and return by reference on scalars

function &scalar_ref_inc_x(&$x) {
$x++;
return
$x;
}

$x = 1;

$x2 =& scalar_ref_inc_x($x); # Need reference here as well as the function sig
scalar_ref_inc_x($x2);

print
$x . ', ' . $x2 . "\n";

# (4) Arrays use pass by value sematics just like scalars

function array_inc_x($array) {
$array{'x'}++;
return
$array;
}

$array = array();
$array['x'] = 1;

$array2 = array_inc_x($array);
array_inc_x($array2);

print
$array['x'] . ', ' . $array2['x'] . "\n";

# (5) You have to force pass by reference and return by reference on arrays

function &array_ref_inc_x(&$array) {
$array{'x'}++;
return
$array;
}

$array = array();
$array['x'] = 1;

$array2 =& array_ref_inc_x($array); # Need reference here as well as the function sig
array_ref_inc_x($array2);

print
$array['x'] . ', ' . $array2['x'] . "\n";
up
10
bgalloway at citycarshare dot org
15 years ago
Be careful about using "do this thing or die()" logic in your return lines. It doesn't work as you'd expect:

<?php
function myfunc1() {
return(
'thingy' or die('otherthingy'));
}
function
myfunc2() {
return
'thingy' or die('otherthingy');
}
function
myfunc3() {
return(
'thingy') or die('otherthingy');
}
function
myfunc4() {
return
'thingy' or 'otherthingy';
}
function
myfunc5() {
$x = 'thingy' or 'otherthingy'; return $x;
}
echo
myfunc1(). "\n". myfunc2(). "\n". myfunc3(). "\n". myfunc4(). "\n". myfunc5(). "\n";
?>

Only myfunc5() returns 'thingy' - the rest return 1.
up
6
nick at itomic.com
20 years ago
Functions which return references, may return a NULL value. This is inconsistent with the fact that function parameters passed by reference can't be passed as NULL (or in fact anything which isnt a variable).

i.e.

<?php

function &testRet()
{
return
NULL;
}

if (
testRet() === NULL)
{
echo
"NULL";
}
?>

parses fine and echoes NULL
To Top