register_shutdown_function()php

时间:2013-10-10 13:39:56

标签: 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'然后执行它?

2 个答案:

答案 0 :(得分:5)

实际上,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;
}

-i.e。你必须使用它的完整路径限定你的回调,以使用内部字符串回调。那是因为如果你将回调指定为字符串,它就像全局上下文(即不再与当前命名空间上下文相关) - 因为字符串本身不包含对当前命名空间范围的任何引用,它只是一个字符串,仅此而已。

答案 1 :(得分:1)

关闭所有对象后,可能会调用shutdown函数,尝试过:

可能会低于代码帮助你...

<?php
function shutdown()
{
    // This is our shutdown function, in 
    // here we can do any last operations
    // before the script is complete.

    echo 'Script executed with success', PHP_EOL;
}

register_shutdown_function('shutdown');
?>