から変数をView渡すように非常に単純なクラスを適応させたので、変数を直接呼び出すことができます。ControllerViewView
<?php echo $name; ?>
そしてそうではない
<?php echo $this->name; ?>
すべてのビュー vars は vars eg$vars['name'] = "test"と呼ばれる連想配列に格納され、 __setvars を割り当てる機能が設定されています。
$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 が含まれているか、テンプレートがその$viewvar を使用する可能性があります。
- 心配する必要はありません。view という変数を割り当てないようにしてください。
out()のように、関数内で長い変数名を使用します$longVarNameSoThatThereWillNotBeCollisions。- 関数に必要なすべての vars を
$this->temp:に割り当てます。$this->temp['view']次に、unset($view)- そして、- と$this呼ばれる変数を正気で使用する人$thisはView!