2011-08-29 44 views
6

我有几个一般使用函数在静态方法中并没有在任何类中有意义。我想将它们封装在一个名称空间下,以免与全局作用域中定义的函数发生冲突。对于我的命名空间类,我遵循广泛采用的模式,其中诸如\ My \ Namespaced \ MyClass的类存在于包含路径上的My/Namespaced/MyClass.php中。PHP命名空间函数最佳实践

是否应该放置名称空间函数的最佳做法?现在我把它们放在同一个命名空间下的类的目录下的“functions.php”中。例如\ My \ Namespaced \ myFunction存在于My/Namespaced/functions.php中。

此外,有没有什么办法自动加载这些函数的方式与类自动加载相同?

回答

5

此外,有没有什么办法自动加载这些函数的方式与类自动加载相同?

不为全局函数,但如果...

是有地方命名空间功能的最佳做法应该放在哪里?

我会考虑使用对象而不是“最佳实践”,但是我们都知道这不是完全正确的。

没有自动加载全局函数的功能,你可以将函数封装成静态函数类,然后自动加载器启动。所以这可能是一个建议,但是你应该清楚这些静态函数对整体设计的影响。

所以要说:如果你对全局函数没问题,那么你可能会对全局静态类函数没问题。如果你改变一个类的名字(比如使用任何全局函数名),它们会中断,但是你创建了一些可以自动加载并且与你的文件命名方案兼容的东西。

编辑:当我写全局,我的意思是完全合格的名称的功能,那是一个开始\。见Name resolution rulesDocs

+0

这些都不是全局的,它使用PHP 5.3命名空间。 – igorw

+0

@igorw:你什么意思?什么不是全球?我只是不明白,随意阐述。 – hakre

+0

也许我没有得到'global'的意思。我只是说所涉及的函数不在全局名称空间中。 – igorw

2

不幸的是,函数没有自动加载(因为PHP开发人员决定这么做......),因此您必须考虑如何获取函数文件。例如,你可以使用一个函数(比如importFunction($namespace);它只是将名字空间映射到文件名并包含文件),或者你可以包含每个包含函数的文件(在启动时等)。