2011-05-29 89 views
0

我正在進行一個項目,我有一個名爲View::import的方法。這會收到兩個參數string name, reference mixed value我寫得這樣更好理解,但是PHP!)。方法和參考溢出

目前,調用這個方法,我需要做的:

$test = 1; 
    View::import('test', $test); 

作品很不錯,但我喜歡叫

View::import('test', 1); 

對於靜態的情況下,我不要不需要替換原始的可變內容,只需要「即時存儲」。

完整的方法是:

private static $globals; 
    public static function import($key, &$value){ 
     self::$globals->{$key} = &$value; 
    } 

如果我更改爲:

public static function import($key, $value){ // no-reference 

我不能改變原有的價值觀,在某些情況下。而且我不會製作像import_static或類似的新方法。

存在一些溢出這種方法? (我知道PHP不完全支持這一點)。

最接近的代碼是:

View::import('test', $temporaryTest = 1); 

但我認爲這是一個很大的workarround,不是?

+0

你不能這樣做。或者引用或值,東西1.'$ temporaryTest = 1'將傳遞此賦值的結果(1),而不是引用。 – 2011-05-29 22:08:28

+0

當然,會通過自己的'$ temporaryTest'(即等於'1')。這就是我目前的工作方式。 (在PHP 5.3中起作用,至少) – 2011-05-29 22:41:00

回答

2

你可以'溢出'這通過改變你的代碼的設計。例如做這樣的事情:

public static function import($key, $value){ 
    self::$globals->{$key} = $value; 
    // do something with $value 
    return $value; 
} 

,然後你就可以寫:

$test = 1; 
$test = View::import('test', $test); 

還有:

View::import('test', 1); 

下面是一些替代方案,這實際上涉及創造新的但有意義的方法:

// Your old method 
public static function import($key, $value){ 
    self::$globals->{$key} = $value; 
} 
// Your new method 
public static function bind($key, &$value){ 
    self::$globals->{$key} = &$value; 
} 

通過應用上述內容,您可以輕鬆查看調用特定方法時真正發生的情況。

它有幫助嗎?

+0

1.是的,我真的缺乏這句話(我編輯了你的答案); 2.問題是這個值可以通過訪問'$ globals'的其他方法來改變futurelly(但還有另外一個問題);是的! 'bind'這個名字對我來說聽起來更好。我將與此工作,現在,爲這種情況:)謝謝 – 2011-05-29 22:46:03

+0

@大衛沒問題,歡迎您。 – Tadeck 2011-05-29 22:48:37