为什么在另一个函数中声明函数使其在php中全局可访问,以及如何正确管理它?

为什么在另一个函数中声明函数使其在php中全局可访问,以及如何正确管理它?,php,Php,这个问题可能已经被提过好几次了,但到目前为止我还没有找到令人满意的答案,让我们看看下面的代码: class SomeClass { public static function init() { function some_function() { echo "I am globally accessible"; } } } SomeClass::init(); // now I can acce

这个问题可能已经被提过好几次了,但到目前为止我还没有找到令人满意的答案,让我们看看下面的代码:

class SomeClass
{
    public static function init()
    {
        function some_function()
        {
            echo "I am globally accessible";
        }
    }
}

SomeClass::init();

// now I can access some_function globally
// this will output: I am globally accessible
some_function();
我从中的php文档中发现,它说在函数中声明的任何函数都可以全局访问。我不明白的是为什么它是这样设计的


我想利用这个特性,比如创建一个常用的助手函数,比如在定制开发的mvc框架的控制器和视图中,因此我只需调用函数
some_function()
,而不是调用类/对象方法
self::some_function()
$this->some_function())
,但我找不到有关如何正确使用此功能以及如何管理其中声明的全局可访问函数的任何信息。

虽然这是PHP的一个已知功能,但嵌套函数并不常用,而且有充分的理由。他们会产生难以应付的行为。例如,在示例中,如果没有先调用init(),就不能调用某个函数(),因为在调用init()之前不会定义某个函数()。另一方面,嵌套函数不在其容器的范围内结束,而是在容器的命名空间上结束


除了一些假定的模糊PHP竞争,我会避免这些事情,比如瘟疫

不管它为什么是这样设计的,为什么你觉得有必要这样做呢?你说的并不完全正确:函数将在适当的名称空间中定义:如果你不使用名称空间,然后,它将在全局命名空间中定义,也许您应该考虑使用闭包,而如果您希望在类/方法的范围内定义的函数,请不要使用全局可访问的变量和函数。这是一种非常糟糕的做法。所有PHP函数都是全局可访问的。混淆源于使用相同的
函数
关键字来定义类方法。