【问题标题】:What is the point of assigning the return value of a void method to a variable? [closed]将 void 方法的返回值分配给变量有什么意义? [关闭]
【发布时间】:2018-04-15 06:36:19
【问题描述】:
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。有人告诉我这个:

“迭代器的关键在于你不关心方法是如何被调用的, 你只关心每个单独的方法”。

这个人是什么意思?

【问题讨论】:

  • $var的作用域和$this有很大的不同
  • 这不是对函数的赋值,它是关于检索函数返回值,在你的情况下不存在,因为函数只回显一行

标签: php methods iterator return-type


【解决方案1】:

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

  • 在您的示例中,这是因为没有返回值。换句话说,该函数返回void,这将导致$var 成为null。一般来说,如果一个函数根本不包含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

但是要小心这些类型的函数调用,它们会带来很多陷阱。

【讨论】:

    【解决方案2】:

    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
    

    【讨论】:

      猜你喜欢
      • 2012-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多