我是 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/