今天我在 PHP 8.2 中遇到了一个我没有预料到的行为。请参阅以下代码:
代码
function foo(&$undefined) {
if (\is_null($undefined)) {
return \sprintf('value: "%s"', $undefined);
}
}
print(foo($undefined)) . "\n";
var_dump($undefined);
结果
value: ""
NULL
如您所见,变量
$bar
未定义。虽然我预计会出现致命错误,但我可以通过引用传递它,这没有问题。看起来 &$undefined
渲染为 null
。
这是由于历史原因吗?人们通常也会期望其他语言也有这样的情况吗?
这对于像
mysqli_stmt::bind_result()
这样的函数很有用。您将结果绑定到尚不存在的变量。这会创建变量,然后当您调用 mysqli_stmt::fetch()
时,它将用查询结果中的值填充它们。
它也可以与
mysqli_stmt::bind_param()
一起使用。您绑定到计划稍后分配的变量,例如循环中。
$stmt = $conn->prepare("INSERT INTO tablename (col1, col2) VALUES (?, ?)");
// bind to references to these nonexistent variables
$stmt->bind_param("ss", $var1, $var2);
foreach ($data_array as [$var1, $var2]) { // assign the variables
$stmt->execute();
}