2014-06-28 125 views
1

我有一個私有函數,它有很多變量,比如說:$foo$bar$baz從其他函數訪問本地變量PHP

在函數內部,我叫parent::_setViewVars(array('foo','bar','baz'));

_setViewVars看起來如此:

protected function _setViewVars($a){ 
    foreach($a as $v){ 
     global $$v; 
     $this->set($v, $$v); 
    } 
} 

我只是想擺脫掉CakePHP的狗屎80行$this->set('selected_areas',$selected_areas);,這就是這個函數是什麼。因爲它不是全局變量,因此無法訪問$$v。鑑於這個函數是從具有這些變量的上下文中調用的,我能以某種方式達到它們嗎?

(由是否有名稱相同的批量設置視圖變量的CakePHP的方式的方式,告訴我如何 - 我還沒有找到一個)

PS:包裝的一切到一個數組是不是一個解決方案,我們在這裏討論數以千計的不必要的方括號。

+0

看一看[compact](http://us1.php.net/manual/en/function.compact.php),它會創建arr對你的場景有用。 –

+0

我試過了:'compact'也沒有達到這些變量。 –

+0

你能重新定義'parent :: _ setViewVars'嗎?或者跳過完全調用它來支持你自己調用' - > set()'的循環,處理'compact'的輸出? –

回答

1

什麼你要找的實際上是相當標準的PHP:

compact() - Create array containing variables and their values

範例顯示它在一個CakePHP的操作使用方法:

$var1 = "I"; 
$var2 = "love"; 
$var3 = "pizza!"; 
$this->set(compact('var1', 'var2', 'var3')); 

(可能要嘗試淡化有點憎恨 - 你更可能以這種方式獲得幫助)