【问题标题】:Only one or many functions per file in PHP?PHP中每个文件只有一个或多个函数?
【发布时间】:2011-05-04 06:09:51
【问题描述】:

每当我在 php 中设计我的应用程序时,我遇到的这个问题确实让我头疼:我不知道是否应该为每个函数创建单独的文件(例如:用于验证特定表单的函数)。

好的,有人可能会争辩说这是没有意义的,因为我必须单独包含每个文件,这可能会导致应用程序更慢?

但我仍然认为它确实有意义,因为对于一个页面加载,我怀疑脚本是否会使用其他功能,所以它们必须毫无意义地加载?此外,如果我设计的系统为我动态地执行此操作(解析 url vars 等),我不必手动包含每个函数文件,也就是说,在需要时准确地加载函数(文件)。你怎么看?

【问题讨论】:

    标签: php performance function code-organization pageload


    【解决方案1】:

    您在使用 OO 吗?如果是这样,那么您绝对应该为每个文件保留一个类,并智能地命名文件...

    class Page {
          ...
    }
    

    应该可以在 classes/Page.phpincludes/Page.class.php 或类似的地方找到。

    如果你只有一堆全局函数,你应该将它们分组到文件中,例如includes/functions/general.php.

    详细来说,您的functions 文件夹可能有...

    • array.php
    • string.php
    • form_validation.php
    • request.php
    • general.php
    • html.php

    如果您要像这样组织文件,更好的主意是使用一个类并将函数设为静态,例如string::isAlphaNum($str)。这是一个更好的主意,因为它只向全局命名空间引入了一个新术语,而不是不必要的一堆。

    如果您使用的是 PHP 5.3,您还可以查看命名空间。

    【讨论】:

    • 您能否详细说明一下如何以及为什么使用静态方法与函数相比是“更好的主意”?
    • 嗨,alex,感谢您的回复,是的,我正在使用 OO。有时我会感到困惑,我应该使用命名空间还是使用静态。
    • @Chris,因为很多函数使全局名称空间变得混乱。当然,您可以为函数命名空间,但这需要大量 use 语句。相关的功能应该组织成一个类。需要一个 use 语句(如果您使用名称间距)。这也使得共享静态变量更容易处理。
    【解决方案2】:

    您几乎肯定会看到,通过增加对(许多)多个文件的磁盘 I/O 读取,与对具有许多功能的较小文件集相比,对性能的影响更大。

    对于自动文件包含,将函数包装到合适的类中并使用spl_autoload 让 PHP 处理包含过程。

    【讨论】:

    • 是的,性能,这是我关心的。我在 __callStatic 的帮助下创建了一个名为 AutoIncluder 的类,因此我可以自动加载函数(例如:AutoLoader::myFunction())。我知道这是反对优化,但写起来很有趣:-)
    【解决方案3】:

    文件包含的开销很小,考虑到缓存和其他事情,您不必真正担心它。更多的是关于如何让自己保持井井有条并快速找到自己的东西。

    老实说,我很少使用函数,我使用类。规则通常是每个文件都有一个类。但我也有一个 toolbox 文件,其中包含我所有的全局函数。

    【讨论】:

    • “但我还有一个工具箱文件,其中包含我所有的全局函数。”。这就是问题所在,当我将单独的文件与工具箱功能混合,然后我有依赖于它们的远程类时,它让我失去了想法......
    • 我不了解你。但是我只有一个工具箱文件,而且可能类似于... 10 个函数,或者更少。这只是不值得为其开设课程的东西,每个示例redirect()
    【解决方案4】:

    您只需确保已安装 APCxCacheeAccelerator。它们都为编译的 PHP 字节码提供缓存。

    这意味着一旦文件被包含,它将被存储在内存中并准备好被功能请求使用。不需要包含文件。

    【讨论】:

    • 谢谢,我去看看。我对缓存不太了解,需要先进入它。
    猜你喜欢
    • 2010-10-06
    • 2019-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    相关资源
    最近更新 更多