2012-10-21 57 views
1

位一個奇怪的問題,但我承擔。我正在編寫一個小型的MVC框架,主要是爲了學習目的。當我打開的意見,我只是包括視圖文件,然後使用extract($data);,所以我可以在我的觀點中使用變量。這是它看起來像在我的控制器:限制變量使用一個文件

// Assign view variables and load the views 
$data = array('title' => 'testing the framework', 
       'users' => $this->models['Users']->getAllUsers()); 
$this->loadViews(array('header', 'home', 'footer'), $data); 

它完美,但它只是發生在我,如果我在我的項目的任何位置的任何變量被稱爲$title$users,他們會衝突什麼,我'm extract()'ing。這還沒有成爲一個問題,但我有一種感覺,我現在需要在它做之前處理它。

我發現使用的變量是extract() ED前綴的唯一解決方案。這樣我就可以像<?php echo $tpl_whatever; ?>而不是<?php echo $whatever; ?>

任何人都可以提供一些建議在我的模板中使用它們?也許我可以限制變量的範圍?

謝謝!

+0

你甚至知道[模板](http://codeangel.org/articles/simple-php-template-engine.html)和看法是不同的東西? MVC設計模式中的視圖包含所有UI /表示邏輯。他們創建的生成響應可能會或可能不會通過組合多個模板生成。另外,在主題上,模型是一個層次。不是班級。也不是一個對象。 –

回答

0

會有與其他控制器,因爲您提取$數據變量是私有沒有衝突。此外,如果您的變量在您的控制器功能中有重複,則最後的聲明將是要使用的聲明。

3

只有您的方法中的變量可能有衝突See Variable Scope但如果發生這種情況,您可以通過額外的標記(如EXTR_PREFIX_ALL)輕鬆解決extract中的衝突。

你也可以看看EXTR_PREFIX_SAMEEXTR_SKIPEXTR_OVERWRITE提取過程中,以解決可能勾結

的變量

$name = "Baba"; 
$array = array("title" => "Restricting variable use to one file", 
       "name" => "James Dawson"); 

EXTR_PREFIX_ALL

extract($array,EXTR_PREFIX_ALL,"new"); 
var_dump($new_title,$new_name,$name); 
      ^------------------------------ it now has prifix 

輸出

string 'Restricting variable use to one file' (length=36) 
string 'James Dawson' (length=12) 
string 'Baba' (length=4) 


EXTR_PREFIX_SAME

extract($array, EXTR_PREFIX_SAME, "prifix"); 
var_dump($name,$title,$prifix_name); 
          ^------------------ Only Conflict has prifix 

輸出

string 'Baba' (length=4) 
string 'Restricting variable use to one file' (length=36) 
string 'James Dawson' (length=12)