为什么这个全局变量不在匿名函数中设置?

发布于 2024-10-19 06:25:19 字数 271 浏览 4 评论 0原文

$GLOBALS['failed'] = "no";

set_error_handler(function($errno, $errstr) {
    $GLOBALS['failed'] = "yes";
});

a_function_that_triggers_the_above_function();

echo $GLOBALS['failed']."\n"; # => "no"

我 100% 确定会触发该匿名函数。为什么 GLOBALS 值没有改变?

$GLOBALS['failed'] = "no";

set_error_handler(function($errno, $errstr) {
    $GLOBALS['failed'] = "yes";
});

a_function_that_triggers_the_above_function();

echo $GLOBALS['failed']."\n"; # => "no"

That anonymous function is triggered, I'm 100% sure. Why isn't the GLOBALS value changed?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

傲影 2024-10-26 06:25:19

不确定您在触发错误的特定函数中执行的操作,但使用这部分代码:

$GLOBALS['failed'] = "no";

set_error_handler(function($errno, $errstr) {
    var_dump('handler !');
    var_dump($errstr);
    $GLOBALS['failed'] = "yes";
});

echo 10 / 0;

var_dump($GLOBALS['failed']);

我得到以下输出:

string 'handler !' (length=9)
string 'Division by zero' (length=16)
string 'yes' (length=3)

这表明:

  • 处理函数实际上被调用
  • 全局变量受到影响。

(我使用的是 PHP 5.3.2)

Not sure what you are doing in your specific function that triggers an error, but using this portion of code :

$GLOBALS['failed'] = "no";

set_error_handler(function($errno, $errstr) {
    var_dump('handler !');
    var_dump($errstr);
    $GLOBALS['failed'] = "yes";
});

echo 10 / 0;

var_dump($GLOBALS['failed']);

I get the following output :

string 'handler !' (length=9)
string 'Division by zero' (length=16)
string 'yes' (length=3)

Which shows that :

  • The handler function is actually called
  • The global variable is affected.

(I'm using PHP 5.3.2)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文