代码之家  ›  专栏  ›  技术社区  ›  user9582261

将void方法的返回值赋给变量有什么意义?[已关闭]

  •  1
  • user9582261  · 技术社区  · 8 年前
    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 回复  |  直到 8 年前
        1
  •  0
  •   Namoshek    8 年前

    基本上,在您的示例和迭代器的链接示例中,没有必要指定返回值。

    • 在您的示例中,这是因为没有返回值。换句话说,函数返回 void 这将导致 $var 未来 null 。通常,如果函数包含 return 完全声明或仅声明 return; (请注意,没有返回任何变量),将结果存储在变量中是无用的。
    • 在迭代器示例中,它是不必要的,因为没有使用该值。但是 $current 变量仍然包含当前迭代的实际值-不是 无效的 (除非数组包含 无效的 ,显然)。实际呼叫 $this->current() 在迭代器实现中根本没有必要-看起来这样做完全是为了获得 echo "current: $var\n"; 检查有效性时。

    还有其他问题 无效的 过去的返回类型,例如。 Void as return type


    顺便说一句,如果您的问题也是关于在变量中存储函数(而不是其结果),那么您的意思可能是这样的:

    function foo() {
        echo 'bar';
    }
    
    $var = 'foo';
    $var(); // outputs: bar
    

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

        2
  •  0
  •   hassan    8 年前

    没有必要指定 void 变量的方法/函数。

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

    假设您有一个从数据库返回一些数据的函数,因此,您不必在每次调用函数时重新查询数据库,而是将返回的数据返回(可以说是缓存)到一个变量中,以便在以后对其执行某些操作,只要此数据没有更改。

    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