9

SOに関するほとんどすべてのチュートリアルまたは回答で、コントローラーからビューにデータを送信する一般的な方法を確認します。クラス ビューは、多くの場合、以下のコードに似たものになります。

class View
{
    protected $_file;
    protected $_data = array();

    public function __construct($file)
    {
        $this->_file = $file;
    }

    public function set($key, $value)
    {
        $this->_data[$key] = $value;
    }

    public function get($key) 
    {
        return $this->_data[$key];
    }

    public function output()
    {
        if (!file_exists($this->_file))
        {
            throw new Exception("Template " . $this->_file . " doesn't exist.");
        }

        extract($this->_data);
        ob_start();
        include($this->_file);
        $output = ob_get_contents();
        ob_end_clean();
        echo $output;
    }
}

データを配列に入れてから、extract($this->_data) を呼び出す必要がある理由がわかりません。コントローラーからいくつかのプロパティをビューに直接配置しないのはなぜですか

$this->_view->title = 'hello world';

次に、レイアウトまたはテンプレートファイルで次のことができます。

echo $this->title;
4

2 に答える 2

1

その理由は単に「タイピングが少ない」ためだと思いますが、それにはいくつかの素晴らしい副作用があります。

  • テンプレートを書いている人が php に慣れていない場合に役立ちます。これにより、「これ$this->はどういう意味ですか?」と心配する必要がなくなります。
  • 変数用に別のコンテナーを用意することは、そのクラスに対してプライベートにする必要があるビューのプロパティがいくつかあり、ライブラリの作成者がそれらをテンプレートの作成者に公開したくない場合にも役立ちます。
  • ビュー自体のプロパティおよびテンプレートの変数との名前の競合を防ぎます。
  • メソッド ベースのアクセス スキームよりもはるかに高速です。たとえば、smarty が作成されたときほど関連性がなくなっている可能性があります (php4 でも機能しました)。
于 2013-06-24T16:00:02.437 に答える