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。有人告诉我这个:
"迭代器的关键是你不关心如何调用方法, 你只关心每一种单独的方法"。
这个人的意思是什么?
答案 0 :(得分:0)
基本上,在您的示例和迭代器的链接示例中,不需要分配返回值。
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
但是要注意这些函数调用,它们会有一些陷阱。
答案 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