Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
注册函数()php_Php - Fatal编程技术网

注册函数()php

注册函数()php,php,Php,我是php新手。我开始了解php中的register\u shutdown\u function()。我在php.net手册中读到过这个函数,当脚本完成执行时,这个函数调用。但是我有一个问题 如果我把这个函数放在命名空间中,比如 namespace MyNamespace; register_shutdown_function("myHandler"); // this throws an error because it can't find function function myH

我是php新手。我开始了解php中的register\u shutdown\u 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\u shutdown\u function()和myHandler()都在同一命名空间中


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

在解构所有对象后,可能会调用关闭函数,您是否尝试过:

下面的代码可能对你有帮助

<?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');
?>

实际上,
寄存器关闭函数()
与此无关。它是关于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.您必须使用回调的完整路径来限定回调,以使用该内部字符串回调。这是因为,如果将回调指定为字符串,它将变得类似于全局上下文(即不再与当前命名空间上下文相关)-因为字符串本身不包含对当前命名空间范围的任何引用,它只是一个字符串,仅此而已。

您遇到了什么错误
//这不会引发错误。
?你的代码是一个文件还是两个文件?如果是2,它应该可以工作。它向我显示此错误“警告:注册\关闭\函数():在第6行的/var/www/workspace/6thAssignment/include/test.php中传递了无效的关机回调'ErrorHandlerHelper::errorHandler',我尝试了放入相同的文件和不同的文件,结果相同,但我不明白为什么会这样。只有在未传递可调用函数时才会出现此错误。请参阅并感谢您的帮助我已经在php.net手册中阅读了这个示例,但它并没有帮助。是的,我得到了您的结论,但我的问题是,如果register_shutdown_function()和myHandler()都在同一名称空间中,那么为什么它会要求“myHandler()”的完整路径?@SohilDesai我已经提到过这一点。字符串回调仍然是一个简单的字符串,它不能包含对当前上下文的任何引用。字符串只是一个字符串,仅此而已——这就是为什么必须在其中指定完整路径的原因。