从PHP名称空间中定义全局函数

从PHP名称空间中定义全局函数,php,namespaces,Php,Namespaces,是否可以从PHP名称空间(在具有声明的文件中)定义全局函数?如果是,怎么做 <?php namespace my_module; # bunch of namespaced functions # ... # then I want to define a global function my_module() # that is an alias to my_module\mymodule() 这是可能的,但除了糟糕的设计之外,您还必须为每个名称空间封装代码,并且不能使用名称空间my

是否可以从PHP名称空间(在具有声明的文件中)定义全局函数?如果是,怎么做

<?php
namespace my_module;

# bunch of namespaced functions
# ...
# then I want to define a global function my_module()
# that is an alias to my_module\mymodule()

这是可能的,但除了糟糕的设计之外,您还必须为每个名称空间封装代码,并且不能使用
名称空间my_模块名称空间my_模块{…}

例如:


“包含”文件中定义的函数具有全局作用域

所以(我还没有验证)您可以将函数声明放在一个小文件中,并包含它

不完全是问题中设想的那样

另一种方法是创建一个局部函数,在其中使用“global”关键字,并将闭包分配给一个全局变量,然后可以在任何需要的地方将其“用作函数”。
我当然对普通变量这样做过,我认为没有理由不对闭包不起作用。

你可能不应该这样做,因为它到处都在喊“糟糕的设计,糟糕的结构”。您这样做的具体原因是?@Sven请参阅更新的问题。我宁愿将所有内容都放在一个文件中,也不愿创建一个单独的文件来定义一个函数。@ryanve:我支持Sven。我建议提供大图视图并询问是否有比这项工作更好的方法来实现这一点。@ USER 1161318我不认为这是一个工作。我想知道所有可能的事情,然后决定如何使用;]不幸的是,另一个合法的用例是使用WordPress,并且必须覆盖一个可插拔的函数……虽然强烈反对将多个名称空间合并到同一个文件中作为编码实践,但有许多合法的理由,一个人可能需要这样做,而不一定意味着“糟糕的设计”、“糟糕的结构”或者“糟糕的编码”。我们应该解释和教育,而不是骚动和批评。毕竟,语言允许某些“自由”是有原因的。我发现它在尝试为旧版本的PHP实现polyfills时非常有用。我有一个像入口点一样的文件,其中包括所有其他必需的文件。它包含了我认为是我的“主要”命名空间。最后,我将所有多边形填充(例如)写入全局命名空间。
namespace my_module {

    function module_function()
    {
        // code
    }
}

namespace {
    // global namespace.

    function my_module()
    {
        // call your namespaced code
    }
}