首页 > 解决方案 > 在字符串连接之前呈现 PHP foreach 循环

问题描述

我正在尝试在<article>.

Hello World 组件:

//components/HelloWorld.php
<?php //some comments ?>
<h1><?php echo 'Hello World'; ?></h1>;

Foo 组件:

//components/Foo.php
<?php //some comments ?> 
<?php echo 'Foo'; ?>;

我的课:

//Render_Content.php

class Render_Content {

    public $content_components;

    function __construct($args) {

        $this->content_components = $args['content_components'];

    }

    private function loop_components($components) {
        foreach($components as $component):
            require 'components/' . $component . '.php';
        endforeach;
    }

    public function render_content() {
        $rendered_content = '<article>';
        $rendered_content .= $this->loop_components($this->content_components);
        $rendered_content .= '</article>';

        echo $rendered_content;
    }

}

我的文件:

//myfile.php

$args = array(
    'content_components' => ['HelloWorld', 'Foo']
);
$content = new Render_Content($args);
$content->render_content();

我期望发生的是这样的:

<article>
  <h1>Hello World</h1>
  <h1>Foo</h1>
</article>

但是,发生的事情是这样的:

<h1>Hello World</h1>
<h1>Foo</h1>
<article></article>

我究竟做错了什么?

提前感谢您的帮助。

标签: phphtmlforeach

解决方案


正如@NiettheDarkAbsol 在评论中指出的那样,此代码将起作用。

//Render_Content.php

class Render_Content {

    public $content_components;

    function __construct($args) {

        $this->content_components = $args['content_components'];

    }

    private function loop_components($components) {
        ob_start();
        foreach($components as $component):
            require 'components/' . $component . '.php';
        endforeach;
        return ob_get_clean();
    }

    public function render_content() {
        $rendered_content = '<article>';
        $rendered_content .= $this->loop_components($this->content_components);
        $rendered_content .= '</article>';

        echo $rendered_content;
    }

}

推荐阅读