【问题标题】:How many lines of PHP code is too many for one file?一个文件有多少行 PHP 代码太多了?
【发布时间】:2009-12-28 02:36:22
【问题描述】:

我正在创建一个 PHP 文件,它执行 2 次 mysql 数据库调用,脚本的其余部分是用于 file_exists 和其他简单变量之类的 if 语句。到目前为止,我在这个文件中有大约 2000 行代码。

如果陈述为真,是否最好包含一个单独的文件?还是直接在 if 语句中直接输入代码?

PHP 应该遵守的单个文件的最大代码行数是多少?

【问题讨论】:

    标签: php include lines-of-code


    【解决方案1】:

    我想说不应该有任何与您的 php 文件中的行数有关的性能问题,它可以根据您的需要而定。

    现在,对于模式和最佳实践,我想说你必须自己判断,我看到了许多组织良好的数千行文件和许多实际上很小且难以阅读的文件。 我的建议是:

    • 判断源代码的可读性,始终把它组织好。
    • 如果您的文件同时执行以下两项操作,那么在某种程度上进行逻辑分离非常重要:繁重的数据库访问、写入、修改、html 呈现、ajax 等等。您可能想要分离事物或使用面向对象的方法。
    • 始终在逻辑分离和代码之间寻找平衡。很多 10 行的文件不应该是凌乱或过于整洁

    【讨论】:

    • PHP 文件作为一个整体处理。大文件,即使它们包含未调用的代码,也会对性能产生重大影响。但是,2000 行与“大”的数量级不同。
    • 不过,像 APC 这样的操作码缓存可以解决这个问题。
    【解决方案2】:

    从计算机的角度来看,单个文件中的 2000 行代码并不是很糟糕,但在大多数情况下可能是可以避免的,请查看MVC design pattern,它将帮助您更好地组织代码。

    另外,请记住,包含(大量)文件会减慢代码的执行速度。

    【讨论】:

    • 字节码缓存如 APC 将解决最后一个问题。
    【解决方案3】:

    您可能想阅读像Clean Code by Bob Martin 这样的书。以下是该书中的一些要点:

    • 一个类应该有一个职责
    • 一个函数应该做一件事并做好

    使用 PHP,如果您不使用 Class 方法;你会遇到重复问题。帮自己一个忙,做一些关于这个主题的阅读;它将为您节省更多的扩展和维护时间。

    【讨论】:

      【解决方案4】:

      行数并不是性能的良好指标。确保您的代码组织高效,分为逻辑类或块,并且不要将不相关的代码组合成单个模块。

      像 PHP 这样的语言的一个问题是,除非有一些创造性的缓存,否则每次请求托管页面时,每个包含文件的每一行都必须进行标记、压缩通过解析树并变成有意义的指令。 .NET 和 Java 等编译平台不会受到这种性能杀手的影响。

      此外,由于其他发帖人之一提到 MVC 作为一种保持文件简短的方法:良好的代码组织是经验和常识的函数,与任何特定的模式或架构无关。 MVC 很有趣,但不是解决这个问题的方法。

      【讨论】:

      • 像 APC 这样的操作码缓存 - 不需要特别有创意 - 会处理编译问题。
      • 是的,但据我所知,APC 仍然没有执行本地编译器能够执行的许多优化步骤。不完全是苹果对苹果。
      • 另外,.NET 与 PHP(带和不带 APC)基准测试:brandonsavage.net/of-lies-damned-lies-and-benchmarks-redux
      • 当然它不会像编译语言那么快,但就像你说的,这种比较是苹果到橘子,没有多大意义。
      【解决方案5】:

      您需要关注行数吗?不,不一定。只需确保您的代码有条理、高效且没有不必要的冗长。

      【讨论】:

        【解决方案6】:

        这真的没关系,只要您正确记录了您的代码,尽可能地模块化,并检查了任何低效率。您可能有一个 10,000 行的文件。虽然我通常将应用程序的每个部分分成 500-1000 左右。

        【讨论】:

          【解决方案7】:

          2k 行对我来说听起来太多了......虽然这取决于你所遵循的代码风格,例如许多换行符、许多小函数或良好的 api-contract cmets 可以增加大小,尽管它们是很好的做法。良好的代码格式也可以增加行数。

          关于 PHP,最好知道:是只有一个类的 2k 行,还是只有一个包含非 OOP PHP 代码的大代码?它是否与模板语句和程序逻辑混合在一起(就像我在 PHP 代码中经常发现的那样)?

          通常我不计算这些行,什么时候拆分。他们只是养成了习惯。如果代码变得混乱,我会做出反应并重构。仍然查看了我们作为一个团队最近编写的一些代码,我可以看到一些模式:

          • 如果大小大于 20LOC(没有 cmets)则提取函数/方法并使用 if/else 子句
          • 如果大小 >200-300LOC,则提取到另一个类
          • 如果工件 >10 则提取到另一个包/文件夹

          这仍然取决于我拥有什么样的代码。例如,如果涉及逻辑负载(if/else/switch/for),则每个函数的 LOC 会降低。如果几乎不涉及任何逻辑(简单愚蠢的单路径代码语句),则限制会增加。最后,最重要的规则是:人类是否能够理解代码。她/他能很好地阅读吗?

          【讨论】:

            【解决方案8】:

            我不知道任何有用的方法来拆分这么简单的代码,特别是如果它们在语义上属于一起的话。

            考虑是否可以通过重构消除某些代码可能更有趣。例如,如果您经常使用具有略微不同变量的特定检查组合,则将检查组合外包到一个函数中并在适当的地方调用它可能会有所帮助。
            我记得曾经看过一个项目,大部分都写得很好,但它有这样的问题。例如,解析其配置文件的代码是这样复制的:

            if (file_exists("configfile")) {
              /* tons of code here */
            } else if (file_exists("/etc/configfile")) {
              /* almost the same code again */
            }
            

            这是一个极端的例子,但你明白了。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2015-05-30
              • 1970-01-01
              • 2010-09-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多