我適應一個非常簡單的View
類從Controller
變量傳給View
這樣在View
我可以調用變量直接例如有趣的現象這
<?php echo $name; ?>
和不
<?php echo $this->name; ?>
所有視圖VARS被存儲在一個所謂的關聯數組瓦爾例如$vars['name'] = "test"
並且具有__set
函數設置以分配變量例如
$v = new View;
$v->name="test";
$v->out();
其中經過變量和包括I加入視圖HTML的
out()
功能
所以:
foreach($this->vars as $key=>$val) {
$$key=$val;
}
include $this->view_file;
然後我測試,如果我在模板中使用$this
並加入等對應的變量會發生什麼
$v->this = "test_this";
我的假設是,無論是代碼將失敗,因爲$this
不能重新分配或EV恩,如果它重新分配 - see here - 因爲$this
已被重新分配,從而
include $this->view_file;
將無法正常工作的代碼將失敗!
而是,它的工作。 $this
,直接使用echo $this;
或var_dump($this);
等於,但$this->view_file
仍然指向原始值!
這是怎麼回事?
然後我使用extract($this->vars, EXTR_OVERWRITE)
和$this
重新測試沒有得到感動!
在一般情況下,什麼是正確的做法將變量傳遞到視圖和避免碰撞的功能
function out($view, $toString = false)
{
extract($this->vars);
include $view;
}
和VAR可能有一個變種稱爲視圖或「本」或可能的模板將使用$view
var。
- 不要擔心,只要確保不要指定一個叫做view的var。
- 在
out()
函數中使用長變量名稱,如$longVarNameSoThatThereWillNotBeCollisions
。 - 分配所需要的功能,
$this->temp
所有增值經銷商:$this->temp['view']
,然後unset($view)
- 並以此爲$this
- 誰在心智正常的人會在View
使用一個名爲$this
變量!
有沒有這個問題,或者你只是在咆哮? – 2012-07-10 14:42:10
感謝您修復格式 - 我在中間,您首先到達那裏!問題是:$ this指向「test_this」,$ this-> view_file指向「view.html.php」? – neyl 2012-07-10 14:43:26