理解传递给array_reduce方法的参数

时间:2015-10-15 07:17:34

标签: php

我刚刚通过 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

1 个答案:

答案 0 :(得分:3)

有哪两个参数传递给array_reduce函数?

第一个参数是一个包含2个元素的数组(BlogRenderer()的实例和ArticleRenderer()的实例)。

第二个参数是回调函数。

render()何时成为$r的财产?

回调有2个参数,第二个参数$r包含当前迭代的值。这将是BlogRenderer()ArticleRenderer()的一个实例,因此在类BlogRenderer()ArticleRenderer()中有一个名为render()的方法

我希望这是有道理的。