1

众所周知,return关键字将返回一些值并退出当前函数。意思是,这个仅在某些功能内部使用。

但是,我看到一些 php-dev 在函数之外使用 return 关键字,甚至在 index.php 文件中(在 Web 服务器的根目录中)。那什么意识????顺便说一句,也许在函数中需要一些文件是合乎逻辑的,但这种风格不是我的。

4

3 回答 3

2

除了文档所做的事情外,没有什么可说的了。

关于 的常见用法return

如果从函数内部调用,该return语句会立即结束当前函数的执行,并将其参数作为函数调用的值返回。return 还将结束eval()语句或脚本文件的执行。

关于不太常见的用法:

如果从全局范围调用,则结束当前脚本文件的执行。如果当前脚本文件是included 或required,则将控制权传递回调用文件。此外,如果包含当前脚本文件,则返回的值将作为包含调用的值返回。如果从主脚本文件中调用 return,则脚本执行结束。如果当前脚本文件由 php.ini 中的 auto_prepend_file 或 auto_append_file 配置选项命名,则该脚本文件的执行结束。

于 2012-04-11T08:50:24.040 回答
2

它记录在手册中的某处

// myFile.php
return array( 'foo' => 'bar');

// somewhere else
$config = include 'myFile.php';
echo $config['foo'];

如果您return在主范围内使用 php 将保留文件包含并使用该值作为包含 ( include[_once](), require[_once]()) 的“返回值”。

于 2012-04-11T08:50:26.597 回答
1

但是,我看到一些 php-dev 在函数之外使用 return 关键字,甚至在 index.php 文件中(在 Web 服务器的根目录中)。那什么意识???

你知道共同的目的。但是您要问的是用于防止 php包含文件中的代码注入。看看这篇解释它的帖子:

防止 PHP 包含文件中的代码注入

在讨论编码标准时,不久前我反对在 php 文件末尾添加 ?>。但是 miqrogroove 向我指出了一个有趣的方面,为什么它实际上是有意义的,并且在每个文件的末尾有一个额外的 return 语句:那个(仅仅是 return 语句)可以防止攻击者将有效负载代码附加到现有的 PHP 文件,例如已知的包含文件。对策很简单,只需在文件末尾添加一个return语句即可。它将结束包含“子程序”:

例子:

  /* all the include file's php code */
  return;
?>
于 2012-04-11T08:55:16.723 回答