为什么我可以通过引用传递一个不存在的变量? [重复]

问题描述 投票:0回答:1

今天我在 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

这是由于历史原因吗?人们通常也会期望其他语言也有这样的情况吗?

php pass-by-reference
1个回答
0
投票

这对于像

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();
}
© www.soinside.com 2019 - 2024. All rights reserved.