我正在尝试使用关闭函数,该函数使用注册后动态更改的值。我的理解是,通过引用传递变量将允许更改代码的后续部分以影响关闭调用。下面的代码表明情况并非如此:
<?php
$x = 0;
function shutdown(&$x) {echo $x;}
register_shutdown_function('shutdown',$x);
$x = 1;
exit();
?>
我误解了应该怎么做?寄存器函数的预期行为是将引用传递转换为值传递吗?
PHP版本5.5.9
答案 0 :(得分:3)
可能的解决方案之一是使用匿名函数(在这种情况下它是一个闭包,$x
被捕获作为参考):
$x = 0;
$shutdown = function() use(&$x) { echo $x; };
register_shutdown_function($shutdown);
$x = 1;
exit();
UPD :解释您的解决方案无效的原因:
如果查看register_shutdown_function
签名:
void register_shutdown_function ( callable $callback [, mixed $parameter [, mixed $... ]] )
您将看到参数是按值传递的。就是这样 - $x
行中register_shutdown_function('shutdown',$x);
的值按值传递,并等于调用时的值。
如果您定义了接受引用的函数无关紧要,因为您已经丢失引用(间接地,通过使用不考虑它的函数)而接受引用为时已晚。