Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP命名空间函数最佳实践_Php_Function_Namespaces_Php 5.3 - Fatal编程技术网

PHP命名空间函数最佳实践

PHP命名空间函数最佳实践,php,function,namespaces,php-5.3,Php,Function,Namespaces,Php 5.3,我有一些通用函数,在任何类中作为静态方法都没有意义。我想将它们封装在一个名称空间下,这样就不会与全局范围中定义的函数发生冲突。对于我的命名空间类,我遵循广泛采用的模式,在include路径上的my/namespaced/MyClass.php中存在一个类,如\my\namespaced\MyClass 对于名称空间函数的放置位置是否有最佳实践?现在我把它们放在“functions.php”目录中,在同一名称空间下保存类。例如,My/Namespaced/functions.php中存在\My\N

我有一些通用函数,在任何类中作为静态方法都没有意义。我想将它们封装在一个名称空间下,这样就不会与全局范围中定义的函数发生冲突。对于我的命名空间类,我遵循广泛采用的模式,在include路径上的my/namespaced/MyClass.php中存在一个类,如\my\namespaced\MyClass

对于名称空间函数的放置位置是否有最佳实践?现在我把它们放在“functions.php”目录中,在同一名称空间下保存类。例如,My/Namespaced/functions.php中存在\My\Namespaced\myFunction


还有,有没有办法像自动加载类一样自动加载这些函数?

不幸的是,没有自动加载函数(因为PHP开发人员决定这样做…),因此您必须考虑如何获得函数文件。例如,您可以使用一个函数(如
importFunction($namespace)
;它只需将名称空间映射到文件名并包含文件),或者您可以一次包含函数的每个文件(在启动或类似情况下)

还有,有没有办法像自动加载类一样自动加载这些函数

不适用于全局函数,但如果

对于名称空间函数的放置位置是否有最佳实践

我会考虑使用对象而不是一个“最佳实践”,但是我们都知道它不是完全正确的。 全局函数没有自动加载功能,您可以将函数作为静态函数封装到类中,然后自动加载程序将启动。因此,这可能是一个建议,但是您应该清楚这些静态函数对总体设计的影响

也就是说:如果你可以使用全局函数,那么你可能可以使用全局静态类函数。如果更改类的名称(如任何全局函数名),它们将被破坏,但是您已经创建了可以自动加载并与文件命名方案兼容的内容


Edit:当我编写global时,我指的是函数的完全限定名,即以
\
开头的名称。请参阅。

这些都不是全局的,它使用的是PHP5.3名称空间。@igorw:你是什么意思?什么不是全球性的?我只是不明白,请随意解释。也许我不明白你所说的
global
。我想说的是,所讨论的函数不在全局名称空间中。我的意思是完全限定的函数名,它们总是全局的。它们以“\”开头。无论如何,全局函数是那些全局可访问的函数,它们在全局命名空间中具有唯一的名称,即使您定义它们不是完全限定的。编辑了答案以使其更直观。我不太喜欢将函数附加到不执行与该类相关行为的类上。它还添加了cruft,我也不喜欢它。我认为用PHP提供的东西,解决方案将归结为风格问题,正如你在文章中提到的那样。