我是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 范围的任何引用,所以它只是一个字符串而已。