gpt4 book ai didi

php - register_shutdown_function 将引用转换为值?

转载 作者:可可西里 更新时间:2023-10-31 23:05:14 27 4
gpt4 key购买 nike

我正在尝试使用一个关闭函数,该函数使用注册后动态更改的值。我的理解是,通过引用传递变量将允许代码后面部分的更改影响关闭调用。下面的代码证明情况并非如此:

<?php
$x = 0;
function shutdown(&$x) {echo $x;}
register_shutdown_function('shutdown',$x);
$x = 1;
exit();
?>

我是不是误解了应该怎么做?将引用传递转换为值传递是注册函数的预期行为吗?

PHP 版本 5.5.9

最佳答案

一种可能的解决方案是使用匿名函数(在本例中是一个闭包,捕获了 $x 作为引用):

$x = 0;

$shutdown = function() use(&$x) { echo $x; };

register_shutdown_function($shutdown);
$x = 1;

exit();

演示:http://ideone.com/L2cYJp

UPD:解释您的解决方案为何不起作用:

如果您查看 register_shutdown_function 签名:

void register_shutdown_function ( callable $callback [, mixed $parameter [, mixed $... ]] )

你会看到参数是按值传递的。就是这样 - register_shutdown_function('shutdown',$x); 行中 $x 的值按值传递,等于调用时的值.

如果您定义接受引用的函数并不重要,因为接受引用为时已晚,因为您已经丢失了引用(间接地,通过使用不考虑它的函数)。

关于php - register_shutdown_function 将引用转换为值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24876635/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com