2

有人可以告诉我,保持相同的抽象级别,如何正确地做到这一点?我有这两个基本课程,没有按我的意愿做。最终结果应该是:

<div class="test">
    content
</div>

如果我这样做:

class Wrapper{

    protected $_html = '';

    public function open(){
        $this->_html .= '<div class="test">';
    }

    public function close(){
        $this->_html .= '</div>';
    }

    public function __toString(){
        return $this->_html;
    }
}

class Content{

    protected $hmtl .= '';

    public function content(){
      $wrapper = new Wrapper();
      $wrapper->open();
      $this->html .= 'test';
      $wrapper->close();
    }

    public function __toString(){
        return $this->_html;
    }
}

$内容=新内容();回声$内容->内容();

我明白了,是的,这是来自源:

"content";

如果我这样做:

class Wrapper{

    protected $_html = '';

    public function open(){
        echo $this->_html .= '<div class="test">';
    }

    public function close(){
        echo $this->_html .= '</div>';
    }

    // Technically don't need this
    public function __toString(){
        return $this->_html;
    }
}

我明白了,是的,这是来自源头,

<div class="test"></div>
"content"

那么我做错了什么?以及如何保持相同的抽象级别并获得所需的输出?

4

2 回答 2

1

您想要某种方法将内容添加到包装器中,例如

public function addContent($content){
        $this->_html .= $content;
    }

你可以这样做

$wrapper = new Wrapper();
$content = new Content();
$wrapper->open();
$wrapper->addContent((string)$content);
$Wrapper->Close();
于 2013-02-13T20:55:14.290 回答
0

您永远不会调用会产生 HTML 标记的Wrapper类方法。__toString我认为你真正想要的是$this->_html = (string)$wrapper->open()它出现的东西。

编辑

实际上,您设置的整个逻辑使我难以理解。你为什么不return使用 ->open() 和 ->close() 方法呢?

于 2013-02-13T20:54:02.613 回答