Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 方法和引用溢出_Php_Function_Methods_Reference_Overflow - Fatal编程技术网

Php 方法和引用溢出

Php 方法和引用溢出,php,function,methods,reference,overflow,Php,Function,Methods,Reference,Overflow,我正在做一个项目,我有一个方法叫做View::import。这将接收两个参数字符串名,引用混合值(我这样写是为了更好地理解,但它是PHP!) 目前,要调用此方法,我需要执行以下操作: $test = 1; View::import('test', $test); 工作很好,但我也喜欢叫: View::import('test', 1); 对于静态情况,我不需要替换原始变量内容,只需要“动态存储” 完整的方法是: private static $globals;

我正在做一个项目,我有一个方法叫做
View::import
。这将接收两个参数
字符串名,引用混合值
(我这样写是为了更好地理解,但它是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\u static
或类似的新方法

是否存在溢出此方法的方法?(我知道PHP并不完全支持这一点)

最接近的代码是:

    View::import('test', $temporaryTest = 1);
但我认为这是一个大问题,不是吗?

您可以通过更改代码的设计来“溢出”这一点。例如,执行以下操作:

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;
}
应用上述方法,您将很容易看到在调用特定方法时实际发生的情况


这对你有帮助吗?

你不能这样做。或参考或价值,某物1
$temporaryTest=1
将通过此分配的结果(1),而不是引用。在确定中,将通过自己的
$temporaryTest
(即等于
1
)。这就是我目前的工作方式。(至少适用于PHP5.3)1。是的,我真的缺少引用(我编辑了你的答案);2.问题是这个值将来可以通过访问
$globals
的其他方法更改(但还有另一件事);3.是 啊
bind
这个名字听起来更适合我。现在,我将处理这个问题:)谢谢