将void方法的返回值赋给变量有什么意义?

时间:2018-04-15 06:36:19

标签: php methods iterator return-type

class test {
    public function hello() {
        echo "hello!";
    }
    public function assign() {
        $var = $this->hello();
        $this->hello(); //both seem to be doing the same thing
    }
}

这是我正在谈论的一段代码的简化示例,位于第43行:https://eval.in/988393

为一个变量分配一个方法调用(我猜它是如何调用它)的重点是什么?它的解释是什么导致它运行(它不只是分配它而是执行代码)。

PS:这实际上与此处的迭代器有关:http://php.net/manual/en/class.iterator.php。有人告诉我这个:

"迭代器的关键是你不关心如何调用方法, 你只关心每一种单独的方法"。

这个人的意思是什么?

2 个答案:

答案 0 :(得分:0)

基本上,在您的示例和迭代器的链接示例中,不需要分配返回值。

  • 在您的示例中,这是因为没有返回值。换句话说,该函数返回void,这将导致$varnull。通常,如果函数根本不包含return语句或仅包含return;(注意没有返回变量),则将结果存储在变量中是没用的。
  • 在迭代器示例中,它是不必要的,因为没有使用该值。但是$current变量仍然包含当前迭代的实际值 - 它不是null(除非数组包含null,显然)。实际上在迭代器实现中根本不需要调用$this->current() - 看起来它只是为了在检查有效性时获得echo "current: $var\n";的良好输出。

过去也有关于void返回类型的其他问题,例如: Void as return type

顺便说一句,如果你的问题也是关于在变量中存储一个函数(而不是它的结果),那么你可能意味着这样的事情:

function foo() {
    echo 'bar';
}

$var = 'foo';
$var(); // outputs: bar

但是要注意这些函数调用,它们会有一些陷阱。

答案 1 :(得分:0)

没有必要为变量分配void方法/函数。

您只需要分配一个return值的函数,而不是一个不返回任何函数的函数,或只是将输出回显到缓冲区。

假设你有一个从数据库中返回一些数据的函数,所以不是在每个函数调用中重新查询你的数据库,而是返回-cache - 将返回的数据转换为变量以对其执行某些操作以后,只要这些数据没有改变。

function foo() {
    return [1, 8, 5, 2, 1, 0, 51];
}

$variable = foo();

// sort $variable instead of foo();
// unique $variable instead of foo();
// sum $variable instead of foo();
// ... and so on