【问题标题】:PHP namespaced function best practicesPHP 命名空间函数最佳实践
【发布时间】:2011-08-29 18:44:22
【问题描述】:

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

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

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

【问题讨论】:

    标签: php function namespaces php-5.3


    【解决方案1】:

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

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

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

    我会考虑使用对象来代替“最佳实践”,但我们都知道这并不完全正确。

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

    也就是说:如果你对全局函数没问题,那么你可能对全局静态类函数没问题。如果您更改类的名称(如任何全局函数名称),它们会中断,但是您已经创建了可以自动加载并且与您的文件命名方案兼容的东西。

    编辑:当我写全局时,我指的是函数的完全限定名称,即以\ 开头的函数。见Name resolution rulesDocs

    【讨论】:

    • 这些都不是全局的,它使用的是 PHP 5.3 命名空间。
    • @igorw:你什么意思?什么不是全球性的?我只是不明白,请随意详细说明。
    • 也许我没有理解你所说的global 的意思。我只是说有问题的函数不在全局命名空间中。
    • 啊,好吧。我的意思是完全限定的函数名,它们总是全局的。它们以 `\` 开头。无论如何,全局函数是可以全局访问的,它们在全局命名空间中具有唯一的名称,即使您定义它们不是完全限定的。编辑了答案以使其更加明显。
    • 我不喜欢将函数附加到不执行与类相关的行为的类。它还增加了杂乱无章,我也不喜欢。我认为 PHP 提供的解决方案将归结为风格问题,正如您在帖子中提到的那样。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-02
      • 2014-07-21
      • 2011-05-31
      • 1970-01-01
      • 1970-01-01
      • 2010-10-03
      • 2011-08-09
      • 2018-11-19
      相关资源
      最近更新 更多