Just to clear things up, if using return on a global scope it will end EXECUTION but NOT PROCESSING.
for example:
file a.php
<?php
if(defined("A")) return;
define("A", true);
echo "Hello";
?>
file b.php
<?php
include("a.php");
include("a.php");
?>
will output "Hello" only once.
but if file a.php is
<?php
if(defined("A")) return;
define("A", true);
function foo(){
}
?>
running file b.php will produce error:
Fatal Error: Cannot redeclare foo()...
return
Se chamada em uma função, a instrução return() termina imediatamente a execução da função atual e retorna seu argumento como o valor da função. return() também termina a execução de uma instrução eval() ou de um script.
Se chamada no escopo global, a execução do script atual será terminada. Se o arquivo do script atual foi incluído com include() ou require(), então a execução é devolvida para o arquivo chamador. Especificamente para arquivos de script incluídos com include(), o valor fornecido para return() será devolvido como o valor da chamada include(). Se return() for chamado do arquivo de script principal, então o programa pára. Se o arquivo de script atual é o configurado em auto_prepend_file ou auto_append_file do php.ini, então a execução desses scripts é finalizada.
Para maiores informações, veja Retornando Valores.
Nota: Note que return() é um construtor de linguagem e não uma função, e parênteses em volta do argumento não é requerido. è comum deixa-los, e você atualmente deve faze-lo, já que o PHP tem menos trabalho para fazer neste caso.
Nota: Você jamais deve usar parênteses em torno da sua variável retornada ao retornar por referência, já que isto não irá funcionar. Você pode retornar apenas variáveis por referência, não o resultado de um comando. Se você usar return ($a); então você não esta retornando uma variável, mas o resultado da expressão ($a) (o qual é, claro, o valor de $a).
return
06-Jun-2008 03:21
02-Dec-2007 11:06
direct true 0.59850406646729
direct false 0.62642693519592
indirect true 0.75077891349792
indirect false 0.73496103286743
It is generally more true, because indirect method implies creating additional variable and assigning a value to it.
But, you know, "results may vary".
12-Oct-2007 10:56
I was wondering what was quicker:
- return a boolean as soon I know it's value ('direct') or
- save the boolean in a variable and return it at the function's end.
<?php
$times = 50000;
function return_direct ($boolean)
{
if ($boolean == true)
{
return true;
}
return false;
}
function return_indirect ($boolean)
{
$return = false;
if ($boolean == true)
{
$return = true;
}
return $return;
}
/* Direct, return true */
$time_start = microtime(true);
for ($i = 1; $i <= $times; $i++)
{
return_direct(true);
}
$time_end = microtime(true);
$time_direct_true = $time_end - $time_start;
/* Direct, return false */
$time_start = microtime(true);
for ($i = 1; $i <= $times; $i++)
{
return_direct(false);
}
$time_end = microtime(true);
$time_direct_false = $time_end - $time_start;
/* Indirect, return true */
$time_start = microtime(true);
for ($i = 1; $i <= $times; $i++)
{
return_indirect(true);
}
$time_end = microtime(true);
$time_indirect_true = $time_end - $time_start;
/* Direct, return false */
$time_start = microtime(true);
for ($i = 1; $i <= $times; $i++)
{
return_indirect(false);
}
$time_end = microtime(true);
$time_indirect_false = $time_end - $time_start;
echo "<pre>";
echo "direct true\t" . $time_direct_true;
echo "\ndirect false\t" . $time_direct_false;
echo "\nindirect true\t" . $time_indirect_true;
echo "\nindirect false\t" . $time_indirect_false;
echo "<pre>";
?>
Representative results:
direct true 0.163973093033
direct false 0.1270840168
indirect true 0.0733940601349
indirect false 0.0742440223694
Conclusion: saving the result in a variable appears to be faster. (Please note that my test functions are very simple, maybe it's slower on longer functions)
25-Jul-2007 03:13
regardez this code:
print pewt( "hello!" );
function pewt( $arg )
{
include( "some_code.inc" );
}
some_code.inc:
return strtoupper( $arg );
.. after much hair pulling, discovered why nothing was being returned by the "some_code.inc" code in the function .. the return simply returns the result TO the function (giving the include function a value), not to the CALLING (print pewt). This works:
print pewt( "hello!" );
function pewt( $arg )
{
return include( "some_code.inc" );
}
So, RETURN works relative to block it is executed within.
18-Dec-2005 09:28
for those of you who think that using return in a script is the same as using exit note that: using return just exits the execution of the current script, exit the whole execution.
look at that example:
a.php
<?php
include("b.php");
echo "a";
?>
b.php
<?php
echo "b";
return;
?>
(executing a.php:) will echo "ba".
whereas (b.php modified):
a.php
<?php
include("b.php");
echo "a";
?>
b.php
<?php
echo "b";
exit;
?>
(executing a.php:) will echo "b".
