私は、オブジェクトに新しいデータを渡すために再利用できるように、いくつかの変数を参照によって「バインド」できる方法を作りたいと考えていました。これはPHPのmysqli_stmt->bind_param()
メソッドと同じことです。Variadic Variables by Reference
しかし、可変引数が参照であるべきことを指定することは可能ではないように見えます。つまり、常に値によって渡されます。この例を考え、説明するために
:出力ではなく、「間違った」よりも、「右」と言って二行であるためには
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;
}
をしかし、明らかに、これは私が定義して喜んで変数の数だけに私を制限しています。現在、私は、bindメソッドのために、以下の厄介な回避策を使用してこれを達成しています。これには、null
の値をメソッドに渡すことができないという副作用があります(存在しない引数として誤って解釈されるため)。
これは私がこれを達成できる別の方法があるかどうかです、それはあまり定型的ではありません?参照による
注意してください。実際に 'mysqli_bind_param'を動的に呼び出す方法を尋ねる質問がたくさんあります。 – deceze