2011-05-29 90 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