PHP函数中的简单`return`是否会过早地结束函数?

时间:2009-07-11 15:06:46

标签: php function

我刚看到这个

// Check to see if the request is a XHR call    
if (request::is_ajax())
{
  // Send the 403 header
  header('HTTP/1.1 403 Forbidden');
  return;
}

我以前没见过简单的return,我从未使用它。我唯一的猜测是它只是与任何return 'something'一样(停止函数),除非实际上没有返回结果。

此外,在这种情况下会发生什么?

function text($var)   
{
    if ( ! $var) {
        return;
    }
    do_something();
}

$var = text('');

我知道这是一个糟糕的例子(它可能应该返回false或抛出异常),但它会是一个错误,还是$var只是为空或空白?

5 个答案:

答案 0 :(得分:10)

function text($var) 

{

    if ( ! $var) {
        return;
    }
    do_something();

}

$var = text('');

echo gettype($var);
echo is_bool($var) ? "true" : "false";
echo is_string($var) ? "true" : "false";
echo is_null($var) ? "true" : "false";

返回:

NULL 假 假 真

答案 1 :(得分:8)

PHP是动态类型的,因此返回任何值都不等于以任何类型返回空值。

答案 2 :(得分:4)

没有值的返回值返回null。

手册中的更多信息:

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

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

答案 3 :(得分:2)

简短回答。它只是结束了函数,它就像一个没有return语句的函数。什么都没有返回,功能就退出了。

在你的第二个例子中,$ var will = nothing。

为什么不执行它并看到?

答案 4 :(得分:2)

是,“return;”或return();在函数中停止运行该函数(如果返回语句不在函数中,则为文件)(如果代码被执行)并且在技术上返回空值。

您的第一个示例将输出'HTTP / 1.1 403 Forbidden'标头,然后在request :: is_ajax()等于true时结束该函数。

在您的代码示例中:

function text($var) 
{

    if ( ! $var) {
        return;
    }
    do_something();

}
$var = text('');

您可以拥有以下内容:

  • 如果$ var不为TRUE(即false,null,text或整数),则退出函数并返回null。
  • 如果$ var是完全正确的(if语句检查$ var是否为真,则运行do_something();

我怀疑您可能想要将if语句更改为:

if (!is_string($var)) {

如果您只想将do_something()转换为字符串或

if (is_null($var)) {

如果你只想设置do_something()到$ var。您可能还想将函数声明更改为: 函数文本($ var == NULL){ 因此,如果您在没有参数的情况下调用文本,则$ var会自动设置为null。