私はPHPに関数を持っていますが、これにはデフォルトでいくつかの引数がありnull
、引数の総数より少ない数で簡単に呼び出すことができます。問題は、nullのデフォルトの引数を直接使用すると、指定された引数を取得しますが、その値を別の変数にコピーしようとすると、変数はデフォルト値の。のみを取得することですnull
。次のようになります。
// inside my MySQLI wrapper class...
public function bind(&$stmt, $types = "", &$arg1, &$arg2 = null, &$arg3 = null /* this goes up to 20; it's auto-generated by another script */)
{
echo "dumping...";
var_dump($arg1); // var_dump shows value from function call (string(0))
var_dump($arg2); // ditto
echo "...dumped";
if ($arg2 != null) $foo = $arg2; var_dump($foo); echo "foo"; // var_dump shows that $foo is NULL
/* ... */
}
別のスクリプトから次のような関数を呼び出します:(これは、トラックや車を処理するダミーのスクリプトです)。
$make = "";
$model = "";
$year = 0;
$license = "";
list($error, $message) = $mysql->bind($stmt, "", $make, $model, $year, $license);
私のbind()
関数はMySQLIbind_param()
とbind_result()
関数のラッパーです。実際のロジックに到達する前に、その時点ですでに失敗しているため、上位の2行のみを含めました。
今のところ、これはPHPのバグのように見えます。これは、変数、引数、デフォルト引数、および参照がどのように機能するかについて私が知っていることに従っていないためです。さらに、この問題は実際のコードにのみ現れるようであり、これをテストするためにコーディングした単純なphpファイルには現れません。
詳細情報:
$foo
NULL
が空の文字列の場合は、が割り当てられ、$arg2
空でない文字列の場合は""
適切に割り当てられます。空の文字列はまだ有効な文字列ですが、なぜPHPがこれを行うのですか?