PHP 命名空间函数最佳实践

6
我有一些通用的函数,它们不属于任何类,因此我想将它们封装在一个命名空间下,以避免与全局作用域中定义的函数发生冲突。对于我的命名空间类,我遵循广泛采用的模式,例如\My\Namespaced\MyClass存在于My/Namespaced/MyClass.php文件中,该文件位于包含路径上。
关于命名空间函数的放置位置,是否有最佳实践?目前,我将它们放在与同一命名空间下的类所在目录中的“functions.php”文件中。例如\My\Namespaced\myFunction 存在于 My/Namespaced/functions.php 文件中。
此外,是否有办法像自动加载类一样自动加载这些函数呢?
2个回答

5
此外,是否有任何方法可以像自动加载类一样自动加载这些函数?
对于全局函数没有,但是如果...
命名空间函数应该放在哪里有最佳实践吗?
我认为使用对象而不是“最佳实践”,但我们都知道这不是完全正确的。
全局函数没有自动加载,您可以将函数封装到类中作为静态函数,然后自动加载器将开始工作。因此,这可能是一个建议,但是您应该清楚地了解这些静态函数对整体设计的影响。
换句话说:如果您对全局函数感到满意,则可能对全局静态类函数感到满意。如果更改类的名称(就像任何全局函数名称一样),它们将中断,但是您已经创建了可以自动加载并与文件命名方案兼容的东西。
编辑:当我写全局时,我指的是函数的完全限定名称,即以\开头的名称。请参见名称解析规则 文档

这些都不是全局的,它使用的是 PHP 5.3 命名空间。 - igorw
@igorw:你是什么意思?什么不是全局的?我真的不明白,请随意解释一下。 - hakre
也许我没有理解你所说的“global”的意思。我的意思是,相关的函数不在全局命名空间中。 - igorw
好的,我的意思是完全限定函数名,它们总是全局的。它们以 \\ 开头。无论如何,全局函数是那些可以全局访问的函数,在全局命名空间中具有唯一的名称,即使您没有完全限定定义它们。编辑答案以使其更加明显。 - hakre
我不太喜欢将与类无关的行为附加到类上的函数。这也会增加冗余代码,而我也不喜欢这样。我认为,使用PHP提供的功能,解决方案将归结为风格问题,正如您在帖子中所提到的那样。 - rr.
显示剩余2条评论

2

不幸的是,对于函数来说没有自动加载(因为PHP开发人员这样决定了...),因此您必须考虑如何包含函数文件。例如,您可以使用一个功能(如importFunction($namespace)),它只是将命名空间映射到文件名并包含该文件,或者您可以一次性包含包含函数的每个文件(在启动时或类似情况下)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接