2

同じレベルの抽象化を維持しながら、これを適切に行う方法を誰かに教えてもらえますか?私はこれらの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 = new Content(); echo $ content-> content();

私は得ます、そしてはい、これはソースからです:

"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マークアップを生成するWrapperclassesメソッドを呼び出すことはありません。__toStringあなたが実際に望んでいるのは$this->_html = (string)$wrapper->open()、それが現れるようなものだと思います。

編集

実際、セットアップのロジック全体は私にはわかりません。return代わりに->open()メソッドと-> close()メソッドを使用しないのはなぜですか?

于 2013-02-13T20:54:02.613 に答える