から変数をView
渡すように非常に単純なクラスを適応させたので、変数を直接呼び出すことができます。Controller
View
View
<?php echo $name; ?>
そしてそうではない
<?php echo $this->name; ?>
すべてのビュー vars は vars eg$vars['name'] = "test"
と呼ばれる連想配列に格納され、 __set
vars を割り当てる機能が設定されています。
$v = new View;
$v->name="test";
$v->out();
したがってout()
、変数を渡し、追加したビュー HTML を含む関数で:
foreach($this->vars as $key=>$val) {
$$key=$val;
}
include $this->view_file;
$this
次に、テンプレートで使用するとどうなるかをテストし、次のような対応する変数を追加しました
$v->this = "test_this";
私の仮定は、$this
再割り当てできないためにコードが失敗するか、再割り当てされたとしても-ここを参照-再割り当てされたためにコードが失敗するということでし$this
た。
include $this->view_file;
うまくいきません!
代わりに、それは機能しました。
、またはequals$this
を使用して直接呼び出された場合でも、元の値を指しています!!echo $this;
var_dump($this);
"test_this"
$this->view_file
どうすればいいの?
その後、使用を再テストしましextract($this->vars, EXTR_OVERWRITE)
た$this
が、触れられませんでした!
一般に、変数をビューに渡し、関数での衝突を回避するための正しいアプローチは何でしょうか
function out($view, $toString = false)
{
extract($this->vars);
include $view;
}
vars には、view または "this" と呼ばれる var が含まれているか、テンプレートがその$view
var を使用する可能性があります。
- 心配する必要はありません。view という変数を割り当てないようにしてください。
out()
のように、関数内で長い変数名を使用します$longVarNameSoThatThereWillNotBeCollisions
。- 関数に必要なすべての vars を
$this->temp
:に割り当てます。$this->temp['view']
次に、unset($view)
- そして、- と$this
呼ばれる変数を正気で使用する人$this
はView
!