PHP
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

require> <declare
Last updated: Mon, 26 Nov 2007

view this page in

return

如果在一个函数中调用 return() 语句,将立即结束此函数的执行并将它的参数作为函数的值返回。return() 也会终止 eval() 语句或者脚本文件的执行。

如果在全局范围中调用,则当前脚本文件中止运行。如果当前脚本文件是被 include() 的或者 require() 的,则控制交回调用文件。此外,如果当前脚本是被 include() 的,则 return() 的值会被当作 include() 调用的返回值。如果在主脚本文件中调用 return(),则脚本中止运行。如果当前脚本文件是在 php.ini 中的配置选项 auto_prepend_file 或者 auto_append_file 所指定的,则此脚本文件中止运行。

更多信息见返回值

Note: 注意既然 return() 是语言结构而不是函数,仅在参数包含表达式时才需要用括号将其括起来。当返回一个变量时通常不用括号,也建议不要用,这样可以降低 PHP 的负担。

Note: 当用引用返回值时永远不要使用括号,这样行不通。只能通过引用返回变量,而不是语句的结果。如果使用 return ($a); 时其实不是返回一个变量,而是表达式 ($a) 的值(当然,此时该值也正是 $a 的值)。



require> <declare
Last updated: Mon, 26 Nov 2007
 
add a note add a note User Contributed Notes
return
drenintell
15-Dec-2007 09:13
Salute,

When an "included" script finishes executing and there is no return statement in the script, the returned value to the parent script is int(1), and not bool(true)

Example 1:

<?php # a.php

$b= include_once( 'b.php' );

var_dump( $b ); # Outputs: int(1) 1

?>

<?php # b.php

# This script is empty

?>

If on the other hand you had an empty return statement in an "included" script, the returned value to the parent script is NULL

Example 2:

<?php # a.php

$b= include_once( 'b.php' );

var_dump( $b ); # Outputs: NULL

?>

<?php # b.php

return;

?>

And finally,

Example 3:
 
<?php # a.php

$b= include_once( 'b.php' );

var_dump( $b ); # Outputs: int(1) 1

?>

<?php # b.php

return 1;

?>

This last example has the same output as Example 1. Something worth noting.

Regards,
  drenintell
Denis.Gorbachev
03-Dec-2007 06: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".
mr dot xanadu at gmail dot com
12-Oct-2007 04: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)
Spacecat
25-Jul-2007 09: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.
warhog at warhog dot net
19-Dec-2005 04: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".
mike at uwmike dot com
07-Dec-2005 01:25
If you have a class file that's getting out of control, you can set it up like so:

<?php
class myClass {
  function
do_this($a, $b) { return require(myClass_do_this.php); }
  function
do_that($a, $b, $c) { return require(myClass_do_that.php); }
}
?>

Might not be for everyone, but it's workable, readable, and keeps the source files shorter.

require> <declare
Last updated: Mon, 26 Nov 2007
 
 
show source | credits | sitemap | contact | advertising | mirror sites