新手请教关于 return 的使用方法

2016-04-07 09:01:32 +08:00
 shyy228

$a=3;

if($a>1){
    return true;
}

echo "hello";

我并没有用 else,我知道 if , else 那个成立就执行那个语句块。但是我 return 以后,后面还有一句输出,为什么不输出了?请大家帮忙解释下 return 这个关键字的用法。

$a=3;

if($a>1){
    echo $a;
}

echo "hello";

这里不 return ,结果就输出了 3hello

小弟刚自学 php 请大家帮忙看看,谢谢!

2589 次点击
所在节点    PHP
8 条回复
shiji
2016-04-07 09:13:39 +08:00
和 C 一样,在一个 function 里面, return 了之后,后面的都不会被执行。

return returns program control to the calling module. Execution resumes at the expression following the called module's invocation.

If called from within a function, the return statement immediately ends execution of the current function, and returns its argument as the value of the function call. return also ends the execution of an eval() statement or script file.

If called from the global scope, then execution of the current script file is ended. If the current script file was included or required, then control is passed back to the calling file. Furthermore, if the current script file was included, then the value given to return will be returned as the value of the include call. If return is called from within the main script file, then script execution ends. If the current script file was named by the auto_prepend_file or auto_append_file configuration options in php.ini, then that script file's execution is ended.
kchum
2016-04-07 09:16:07 +08:00
Return 了,就不会执行后面的代码。
Echo 只是输出字符串,没有返回,该运行的代码还运行。
shiji
2016-04-07 09:20:18 +08:00
如果在一个函数中调用 return 语句,将立即结束此函数的执行并将它的参数作为函数的值返回。 return 也会终止 eval() 语句或者脚本文件的执行。

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

更多信息见返回值。

Note: 注意既然 return 是语言结构而不是函数,因此其参数没有必要用括号将其括起来。通常都不用括号,实际上也应该不用,这样可以降低 PHP 的负担。
Note: 如果没有提供参数,则一定不能用括号,此时返回 NULL 。如果调用 return 时加上了括号却又没有参数会导致解析错误。
Note: 当用引用返回值时永远不要使用括号,这样行不通。只能通过引用返回变量,而不是语句的结果。如果使用 return ($a); 时其实不是返回一个变量,而是表达式 ($a) 的值(当然,此时该值也正是 $a 的值)。
Ellen
2016-04-07 09:20:28 +08:00
return 之后的语句都不会被执行,从一个地方调用函数,就跳到这个函数里面去执行了,当执行到 return 语句之后将返回原先调用的位置继续执行接下来的语句。可以把它想象成一个执行权,调用函数前执行权在自己手里,调用函数就把执行权给函数,执行到 return 之后执行权交还给我。所以它在 return 之后的语句就不没有执行权,因此没有输出。
335774855
2016-04-07 09:37:03 +08:00
执行 return 后函数就结束了,不管 return 后面有多少语句都不会执行
yvanhe
2016-04-07 09:48:17 +08:00
如果你用 Java , return 执行之后,也可以运行 finally 里的语句。细软跑
zqhong
2016-04-07 09:51:15 +08:00
http://php.net/manual/zh/function.return.php

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

例子 1 :
```
<?php
function return_num() {
return 100;
}

// 输出 100
print return_num();
```

=============

如果在全局范围中调用,则当前脚本文件中止运行。

例子 2 :
```
<?php
$a = 3;

if ($a > 1) {
return;
}

// 没有任何输出,脚本在上面 return 后便结束。这个和楼主所说的情况类似
echo "hello world";
```

=============

如果当前脚本文件是被 include 的或者 require 的,则控制交回调用文件。此外,如果当前脚本是被 include 的,则 return 的值会被当作 include 调用的返回值。

例子 3 :
```
// include.php
<?php
return 100;

```

```
<?php
// main.php
print include('include.php');

print require('include.php');

// 输出结果: 100100
```

这里执行 `$ php main.php`,会输出: 100100

=============


如果在主脚本文件中调用 return ,则脚本中止运行。

例子 4 :
```
// include.php
<?php
return 100;

```

```
<?php
// main.php
return; // 主脚本文件在调用 return 之后,就中止运行了。
print include('include.php');

```

这里同样执行 `$ php main.php`,不会有任何输出。

=============


如果当前脚本文件是在 php.ini 中的配置选项 auto_prepend_file 或者 auto_append_file 所指定的,则此脚本文件中止运行。

例子 5 :
打开 php.ini ,作如下的修改: auto_prepend_file="/path/to/include.php"。(修改成你 include.php 文件的绝对路径就好)

```
// include.php
<?php
print "include";
return;

```

```
// main.php
<?php
print 'hello world';

```

同样执行 `$ php main.php`,这里的输出结果是: includehello world 。


=============

其他:
1. `$ php main.php`,这里的 $ 是命令提示符。
2. 遇到问题比较好的办法是看官方手册,中文手册可能内容不全。适当的时候切换到英文版。
shyy228
2016-04-07 10:00:51 +08:00
@shiji
@kchum
@Ellen
@yvanhe
@zqhong
@335774855
谢谢各位的详细,解答,我明白了!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/269136

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX