2009-03-13 18 views
0

私は自分の小さなMVCフレームワークを学習練習として取り組んでいます。素晴らしいことですが、$ thisなしでビューファイル内の変数を参照できるようにしたいと考えています。PHPのクラスに含まれるファイルに変数を渡すにはどうしたらいいですか?

たとえば、私はビューオブジェクトをインスタンス化するコントローラオブジェクトを持っています。コントローラから私はこの

$this->view->foo = "bar"; 

ようなビューに変数を渡すそしてビュー・オブジェクトは、ビュー(例:myView.phtml)に関連するコードを含みます。だから私はこの

echo $this->foo; 

しかし、私がやりたい何を使用しビューファイルで「foo」をアクセスする、と私は何かが明らかに欠けている天気を、私はこれが可能であれば知っているかしていないが、私何このような変数を参照することです

echo $foo; 

誰も私に正しい方向を教えてもらえませんか?

+0

なぜあなたはこれが必要だと思いますか?ほとんどの場合、カプセル化が破られ、名前の競合が発生します。それは巨大な_backwards step_です。 –

+0

うん、それはかなり速く実現しました。 – gargantuan

答えて

1

ビューオブジェクト内のすべての変数は、ビュー内のavailbleになりたい場合は、あなたが配列されたビュー・オブジェクトのプロパティに、あなたの変数を追加し、それらを利用できるようにextract()を使用することができます。

$this->view->variables['foo'] = 'bar'; 

extract($this->view->variables); // now $foo = 'bar'; 

私はextract()の大ファンではありませんが、これはあなたが探しているものを達成するでしょう。

1

あなたのHTMLビューの入力を解析し、$ fooまたは[foo]から$ this-> fooへのエントリを自動的に変更するコードを書くことができます。

<p>[foo]</p> 

をして、いくつかのビューのコードは、ファイルを解析します$ this-の値> fooへの[FOO]のすべてのインスタンスを変更する必要があり:

つまり、あなたのHTMLビューでは、このようなものを入れることができます。だからあなたの出力は次のようになります。

<p>I'm the foo value</p> 

それとも、あなたはSmartyようなものを使用することができます - それはあなたのためにこれを実行し、あまりにもそれを使用する他の多くの理由があります。

+0

良いアイデア。私はあまりにも多くを求めているかもしれませんが、自分の肛門の理由からテンプレートタグを避けようとしています。そしてSmartyは素晴らしいですが、これは私自身の学習効果のためのものですので、私自身の解決策が必要です。 – gargantuan

1

extractを試しましたか?すべての変数を配列に入れるメソッドを追加する必要があります。実際の制限は変数を読み込み専用にすることです。

関連する問題