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
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 的值)。
return
drenintell
15-Dec-2007 09:13
15-Dec-2007 09:13
Denis.Gorbachev
03-Dec-2007 06:06
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
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
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
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
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.
