我刚刚通过 THIS 在线教程,我看到以下脚本:
<?php
include_once 'renderer.php';
class Page {
protected $renderers;
public function add($renderer) {
$this->renderers[] = $renderer;
}
public function render() {
$content = '';
$content .= "--Start of page--\n";
$content .= array_reduce($this->renderers , function($output , $r){
return $output .= $r->render()."\n";
} , '');
$content .= "--End of page--\n";
return $content;
}
}
$page = new Page();
$page->add(new BlogRenderer());
$page->add(new ArticleRenderer());
echo $page->render();
让我们放大对array_reduce()调用的调用,
$content .= array_reduce($this->renderers , function($output , $r){
return $output .= $r->render()."\n";
} , '');
我在这里有2个真正的功能问题,有两个参数传递给array_reduce函数,以及render()
何时成为$r
的属性,以便调用$r->render()
有效吗?该电话究竟如何有效?
我已经在 array_reduce 方法上看到了PHP手册,但是这种方法在这里被使用的方式令我感到困惑,有人可以解释并回答我的上述问题,我会非常感激。
谢谢。
亚历-Z
答案 0 :(得分:3)
有哪两个参数传递给array_reduce
函数?
第一个参数是一个包含2个元素的数组(BlogRenderer()
的实例和ArticleRenderer()
的实例)。
第二个参数是回调函数。
render()
何时成为$r
的财产?
回调有2个参数,第二个参数$r
包含当前迭代的值。这将是BlogRenderer()
或ArticleRenderer()
的一个实例,因此在类BlogRenderer()
和ArticleRenderer()
中有一个名为render()
的方法
我希望这是有道理的。