我在PHP中有一個函數,它有一些參數默認爲null
,這樣我就可以用少於整數個參數的方式輕鬆調用它。 問題是,當我直接使用null-defaulted參數時,我得到給定的參數,但是當我嘗試將該值複製到另一個變量時,變量僅獲取默認值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()
功能是包裝到MySQLI的bind_param()
和bind_result()
函數。 我只包括頂級的幾行,因爲它已經失敗了,甚至還沒有達到實際的邏輯。
現在,它看起來像是PHP中的一個錯誤,因爲這不符合我所知道的變量,參數,默認參數和引用的工作方式。 此外,這個問題只出現在我的真實代碼中,並沒有出現在我編寫的測試這個簡單的php文件中。
進一步信息:
$foo
被分配NULL
,當$arg2
是一個空字符串,""
,並正確時,它是一個非空字符串被分配。空字符串仍然是有效的字符串,那麼爲什麼PHP這樣做呢?
我試了一下,我沒有問題:http://codepad.org/9cioWS04 – 2013-02-11 19:45:55
你也可以說這實際上產生問題的代碼?如果您發佈的代碼沒有生成該代碼,那麼即使您認爲它們在功能上相同,也必須在兩者(或其上下文)之間有所區別。這也可能有助於瞭解您如何調用該函數。 – octern 2013-02-11 19:46:13
哦,另外:'null'可能是一個不好的測試默認值,因爲很多東西都會導致變量被設置爲null。我建議將代碼中的默認值更改爲其他值。如果變量仍然以null結尾,那麼你的問題與默認值無關。 – octern 2013-02-11 19:47:42