我是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;
}

-IE。您必须使用完整的路径来限定您的回调,才能在字符串回调中使用该回调。那是因为如果您将回调指定为字符串,它将变得像全局上下文(即不再与当前 namespace 上下文相关)-因为字符串本身不包含对当前 namespace 范围的任何引用,所以它只是一个字符串而已。

09-16 12:12