php - register_shutdown_function() php

标签 php

我是 php 新手。我开始了解 php 中的 register_shutdown_function()。我在 php.net 手册中读到了这个函数,当脚本完成执行时这个函数调用。但是我有一个问题

如果我把这个函数放在命名空间里会怎么样

 namespace MyNamespace;
 register_shutdown_function("myHandler");  // this throws an error because it can't find function
 function myHandler() 
 { 
    // Some Code.
 }


 namespace MyNamespace;
 register_shutdown_function("MyNamespace\myHandler");  // this throws no error.
 function myHandler() 
 { 
    // Some Code.
 }

为什么 register_shutdown_function() 和 myHandler() 在同一个命名空间中会发生这种情况??

如果我将此命名空间放在不同的文件中并包含该文件,但我不会使用此命名空间“MyNamespace”,那么它会执行吗?

最佳答案

实际上,register_shutdown_function() 与此无关。它是关于 PHP 如何解析字符串回调的。请参阅此示例:

namespace MyNamespace;
$data = ['foo', 'bar'];
$data = array_filter($data, 'myHandler'); //warning, while 'MyNamespace\myHandler' is ok
register_shutdown_function("MyNamespace\myHandler");
function myHandler() 
{
        return 1;
}

-即你必须用它的完整路径来限定你的回调才能在字符串回调中使用它。那是因为如果您将回调指定为字符串,它会变得像 global 上下文(即不再与当前命名空间上下文相关)——因为字符串本身不包含对当前命名空间范围的任何引用,它只是一个字符串,仅此而已。

关于php - register_shutdown_function() php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19297387/

相关文章:

php - 当Web应用程序中的查询失败时,如何正确响应?

php - php中带有foreach语句的多数组回显

PHP 搜索查询精确单词匹配 CONCAT

PHP 无法识别 Mysql 值

PHP 和 MySQL - 遍历结果并显示每个条目的名称和计数

php - Azure 上使用 PHP 的公共(public)文件夹

php - 如何查看日期是否晚于 8 天?

php - 正则表达式 - 从书名中提取卷号和章节号

php - 这个 session 代码我做错了什么?

php - 通过 codeigniter 将帖子数据作为数组从数据库中的网格插入?