在PHP中使用返回关键字非常有趣



正如我们所知,return 关键字将返回一些值并退出当前函数。意思是,这个只在某些函数中使用。

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

除了文档的作用之外,没有什么可说的了。

关于return的常见用法:

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

关于不太常见的用法:

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

它记录在手册中的某个地方

// myFile.php
return array( 'foo' => 'bar');
// somewhere else
$config = include 'myFile.php';
echo $config['foo'];

如果在主作用域中使用return php 将保留文件包含并将值用作包含的"返回值"(include[_once]()require[_once]())。

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

你知道共同的目的。但是您所要求的是用于防止在 php 包含文件中注入代码。看看这篇文章,它解释了它:

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

在讨论编码标准时,不久前我反对 在 PHP 文件的末尾添加 ?>。但是米克罗格罗夫指着我 有趣的方面为什么拥有它实际上是有意义的,并且 每个文件末尾的附加返回语句:那个(仅 return 语句)可以防止攻击者追加有效负载代码 到现有的 PHP 文件,例如已知的包含文件。这 计数器测量非常简单,只需在 文件末尾。它将结束包含"子例程":

例:

  /* all the include file's php code */
  return;
?>

最新更新