Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.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 - Fatal编程技术网

Php 参考变量

Php 参考变量,php,Php,我希望创建一个方法,通过该方法,我可以通过引用“绑定”多个变量,这样它们就可以被重用以向对象传递新数据,基本上做的事情与PHP的mysqli\u stmt->bind\u param()方法做的事情相同 但是,似乎不可能指定变量参数应通过引用传递,因为它们总是通过值传递 举例说明,考虑这个例子: class MyType { private $bound = []; public function bind(...$vars) { $this->bound

我希望创建一个方法,通过该方法,我可以通过引用“绑定”多个变量,这样它们就可以被重用以向对象传递新数据,基本上做的事情与PHP的
mysqli\u stmt->bind\u param()
方法做的事情相同

但是,似乎不可能指定变量参数应通过引用传递,因为它们总是通过值传递

举例说明,考虑这个例子:

class MyType {
    private $bound = [];
    public function bind(...$vars) {
        $this->bound = [];
        foreach ($vars as &$v) { $this->bound[] = &$v; }
    }
    public function echo() {
        foreach ($this->bound as $v) { echo "$v\n"; }
    }
}

$a = 'Wrong'; $b = 'Wrong'; $t = new MyType();
$t->bind($a, $b);
$a = 'Right'; $b = 'Right';
$t->echo();
我希望输出是两行,表示“正确”,而不是“错误”。目前,我正在为bind方法使用以下令人讨厌的解决方法来实现这一点:

public function bind(&$var0, &$var1 = null, &$var2 = null, &$var3 = null, ...$overflow) {
    if (!empty($overflow)) { throw new Exception('Too many arguments'); }

    $this->bound = [&$var0];

    if ($var1 === null) { return; }
    $this->bound[] = &$var1;

    if ($var2 === null) { return; }
    $this->bound[] = &$var2;

    if ($var3 === null) { return; }
    $this->bound[] = &$var3;
}
但很明显,这只限制了我愿意定义的变量数量。这还有一个副作用,就是我不能将
null
的值传递给方法(因为它被误解为不存在的参数)


我想知道的是,是否有其他方法可以实现这一点,而不是像样板一样繁重?

引用可变参数的语法是:

public function bind(&...$vars) {
    ....
}

请注意,可变参考参数可能是呼叫方处理的难题。事实上,您会发现大量问题询问如何动态调用
mysqli\u bind\u param