`return;`和没有回报之间有什么区别?

时间:2011-05-16 13:52:47

标签: php function methods return-value

之间是否存在差异:

function someMethod( $someArg ) {
  // some code
  return;
}

function someMethod( $someArg ) {
  // some code
  // no return
}

两者都有NULL作为'返回值'。有区别吗? PHP内部的东西?性能?速度ω

修改
我问,因为在Zend框架中(in this video)他们使用return;对我来说似乎(似乎)愚蠢。但是,你会认为Zend框架背后的人确实知道他们的PHP ......

11 个答案:

答案 0 :(得分:39)

php code

<?php

function a() {
   echo 1;
   return;
}

function b() {
   echo 2;
}

生成字节码

.FUNCTION a
        ECHO                     1
        RETURN                   NULL
        RETURN                   NULL
        HANDLE_EXCEPTION         
.END FUNCTION

.FUNCTION b
        ECHO                     2
        RETURN                   NULL
        HANDLE_EXCEPTION         
.END FUNCTION

所以显式return语句会生成一条额外的RETURN指令。否则没有区别。

答案 1 :(得分:11)

据我所知,没有区别。

return;主要是从if / else,while或for循环中突破而不返回任何内容。

答案 2 :(得分:4)

在功能上没有区别但是在函数中有一个明显的退出点(返回)总是很好的。一些计算机科学学院认为所有的功能和方法应该只有1个,只有1个出口点。

如果你需要在将来添加一个返回值,那么如果你包含一个空的返回,那么代码中已经有一个明显的点已经被你选中了。

但就像我说的那样,从功能的角度来看,没有太大区别。

答案 3 :(得分:3)

在你的例子中,没有区别。

但是,return将终止该函数,因此您可以选择在return语句之后跳过代码(这是其目的)。

在您的示例中,如果您想要查看return,则为个人偏好。

此外,在某些语言(如Perl)中,最后一个表达式是“隐式”返回值,因此您甚至不需要使用“return”。 (但这不适用于其他语言,如C ++。)

sub foo {
  return 12;
}

sub foo2 {
  12;  # same thing
}

答案 4 :(得分:1)

没有重大区别,您可以使用return;提前退出函数调用。无论哪种方式,它们都会返回NULL,严格来说是工作流程。

答案 5 :(得分:1)

我不是专家,但我会说,如果差别可以忽略不计;有人可能会争辩说你放弃了回报;或者返回false;在函数结束时。

通常我会使用类似

之类的返回
return true;

return $var;

如果我不想返回任何内容或者我想返回false,我就不要使用return

答案 6 :(得分:1)

在PHP和Python等语言中没有真正的区别。 return;可以用来过早地打破这个功能。

然而,当选择的编程语言是C / C ++,Java,C#时,有一个区别,其中没有返回表示void

答案 7 :(得分:0)

一旦调用return,函数调用就会终止。它就像休息一样。因此,如果您的返回位于中间,则会获得一些性能,因为该函数的其余部分未执行。

对于其余部分,通常更好(以可读性方式)使用显式返回而不是隐式返回。如果在函数中保留返回值,您将知道对该函数的调用可能需要返回值。

答案 8 :(得分:0)

return将中断/退出该函数(在switch / case中认为break)

function someMethod( $someArg ) {
    if(condition) {
        return; // will exit function
    }

    // could be more code
}

答案 9 :(得分:0)

我有时喜欢使用“空” return作为函数的最后一条语句,以友好地提醒我们该函数不应返回任何值。

class foo {
  var $name;

  public function bar($x) {
    $this->name = $x;
    return;
  }
}

在ADA中,您有proceduresfunctions。首先不返回任何数据,它们只是执行一些语句。这些函数可以返回数据。

因此,空的return就像“这是一个过程”。

答案 10 :(得分:0)

非常有趣(我认为),具有返回类型会产生很大的不同。三种返回null会引发三种不同的错误:

function foo() : string {
  // return nothing

  // TypeError exception: Return value of foo() must be of the type string, none returned
}

function foo() : string {
  return;

  // Fatal error: A function with return type must return a value
}

function foo() : string {
  return null;

  // TypeError exception: Return value of foo() must be of the type string, null returned
}

我不会猜到,因为所有错误都是运行时,并且所有返回值在技术上都是null