我曾希望創建一種方法,通過這種方法,我可以通過引用「綁定」幾個變量,以便它們可以重新用於將新數據傳遞給對象,本質上執行與PHP的mysqli_stmt->bind_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();
我想是的輸出爲兩行寫着「右」,而不是「錯誤」。目前我實現這一目標使用以下討厭的解決方法綁定方法:
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
的值傳遞給方法(因爲它被誤解爲不存在的參數)。
我想知道的是,是否有另一種方式可以實現這一點,而不是如此粗俗?
請注意,可變參數的參考參數可以在來電者的一側合作疼痛。事實上,你會發現很多問題,詢問如何動態調用mysqli_bind_param ... – deceze