Zend_View_Abstract(日本語)

Zend_View_AbstractZend_View の基底クラスです。Zend_View は、単にこれを継承したうえで _run() メソッドの具象実装を宣言したものです (このメソッドは render() から実行されます)。

Zend_View_Abstract を継承したクラスを作成して 独自の機能を追加したいと思われる方も多いことでしょう。 このクラスにはさまざまなプライベートメンバーが存在するので、 その中身を理解するのは大変です。 このドキュメントでは、このクラスの設計方針とそこにいたる考え方を説明します。

Zend_View は、言わば「アンチテンプレートエンジン」 といったものであり、PHP のネイティブ機能を用いて描画を行います。 PHP のすべての機能がそのまま利用でき、 ビュースクリプトのスコープは呼び出し元オブジェクトを継承します。

特に後者は、この設計の重要なポイントとなります。 内部的には、Zend_View::_run() がやっているのは次のような処理です。

protected function _run()
{
    include func_get_arg(0);
}

こうすることで、ビュースクリプトが現在のオブジェクト ($this) および そのオブジェクトの すべてのメソッドやメンバー にアクセスできるようになります。 多くの操作はアクセス制限されたメンバーの内容に依存しているので、 これは問題を引き起こす可能性があります。 ビュースクリプトから、アクセス制限されたメソッドを直接コールしたり 重要なプロパティを直接変更してしまったりもできてしまうということです。 もしうっかりスクリプトが $_path$_file を変更してしまったら、それ以降の render() やビューヘルパーのコールは正常に動作しなくなります。

幸いなことに、PHP 5 では可視性を宣言することでこの問題を回避できます。 private 宣言されたメンバーは、そのクラスを継承したオブジェクトからは アクセスできなくなるのです。このおかげで現在の設計が可能となりました。 Zend_ViewZend_View_Abstract継承した クラスなので、 Zend_View_Abstract のメソッドやメンバーのうち ビュースクリプトからアクセスできるのは protected あるいは public なものだけです。これで、ビュースクリプトができることを効率的に制限できるようになり、 重要な場所をビュースクリプトから保護できるようになりました。