2011-07-21 12 views
0

私のPHP(Zend Framework)プロジェクトをinjection dependenceに設定しようとしています。これまでのところ、私はモデルをインスタンス化するとき、私はそのような私のモデルにtableview(データベースビュー)を渡します。クラスメンバー変数を動的に構築する

$table = new My_Table(); 
$view = new My_View(); 
$model = new My_Model($table, $view); 

すべての私のモデル構築の世話を同じクラス、メッセージ処理を拡張し、フォームのゲッターをモデルとやり取りします。

今私はmodelmodelを注入しなければなりません。私はこれを行う静的静的方法を探していました。私のモデルの親クラスでは、アプリケーションのブートストラップで呼び出される静的メソッドinjectを追加しました。 key => valueの形式で2つの文字列を渡します。ここでkeyはモデルで作成する必要がある変数の名前で、値はインスタンス化するクラスを表す文字列です。

My_Model::inject('dependentModel', 'My_Other_Model') 

問題私は、次のコードを新しいメンバ変数としてキーを使用しようとするときに発生:

protected function _initDependency() 
{ 
    $this->_table = null; 

    foreach (self::$_staticDependency as $key => $dependency) { 
     $varName = '_' . $key; 
     $this->{$$varName} = new $dependency(); 
    } 
} 

私は以下のようなメッセージ

Notice: Undefined variable: _dependentModel 

を得るだろう何それを達成するための最良の方法は、自分の依存関係を知らないモデルを作成したいと思っていることです。

+0

$ this - > {$ varName} =新しい$ dependency(); ' – thetaiko

答えて

2

使用アレイ

class Foo { 
    private $_data = array(); 


    protected function _initDependency() 
    { 
    $this->_table = null; 

    foreach (self::$_staticDependency as $key => $dependency) { 
     $varName = '_' . $key; 
     $this->_data[$varName] = new $dependency(); 
    } 
    } 
} 

(副作用として、これはまた、可変変数を削除します)

あなたがプロパティの挙動をシミュレートする__get()__set()__isset()__unset()を使用することができます。

+0

あなたの答えをありがとう、その部分は便利です。私は循環クラスのインスタンス化の問題を抱えていたので、私は 'factory/builder'パターン –

0

Doctrine2のような適切なORMを検討しようとしましたか?あなたは車輪を再構築する時間を節約できます。 Doctrine2はZFでセットアップするのが簡単で、スタックした場合のためにネット上に多くの情報があります。

関連する問題