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