【问题标题】:Including class files PHP包括类文件 PHP
【发布时间】:2012-02-06 13:09:05
【问题描述】:

我一直在尝试学习 PHP 中的类,并且我学习过程的一部分一直在研究各种库和那里的东西。当然,我还有很多问题,这里就是其中之一。

当查看一些库时,您调用该库的主文件,它们通过直接按名称调用它们来调用每个库文件,例如 PHP 图表库就是这样做的:

<?php
require_once 'model/ChartConfig.php';
require_once 'model/Point.php';
require_once 'model/DataSet.php';
require_once 'model/XYDataSet.php';
require_once 'model/XYSeriesDataSet.php';

require_once 'view/primitive/Padding.php';
require_once 'view/primitive/Rectangle.php';
require_once 'view/primitive/Primitive.php';
require_once 'view/text/Text.php';
require_once 'view/color/Color.php';
require_once 'view/color/ColorSet.php';
require_once 'view/color/Palette.php';
require_once 'view/axis/Bound.php';
require_once 'view/axis/Axis.php';
require_once 'view/plot/Plot.php';
require_once 'view/caption/Caption.php';
require_once 'view/chart/Chart.php';
require_once 'view/chart/BarChart.php';
require_once 'view/chart/VerticalBarChart.php';
require_once 'view/chart/HorizontalBarChart.php';
require_once 'view/chart/LineChart.php';
require_once 'view/chart/PieChart.php';
?>

但是,我查看了另一个库,他们只是通过使用这样的 PHP 自动加载方法调用目录中的每个文件来自动化该过程(来自 php 手册):

function __autoload($name) {
    echo "Want to load $name.\n";
    throw new Exception("Unable to load $name.");
}

我只是想知道以自动加载方式执行此操作是否有任何优点或缺点?

【问题讨论】:

  • 我认为除了干净的代码之外,加载的类会更少。 autoload 仅在类名无法解析的情况下有效,如果尚未加载,它将自动加载类文件,并且只会在使用时加载类。

标签: php class autoload


【解决方案1】:

我不相信 __autoload 只有优势。但确实有一些。

__autoload 的优点

  • 您不需要维护那么长的包含列表,保持整洁可能会很痛苦(这意味着不会忘记包含)
  • 您只包含您真正需要的内容:某些类可能仅在某些特殊情况下需要,您可以避免它

正常方式的优点

  • 任何人都非常容易理解
  • 查看包含将告诉您文件正在做什么类型的事情
  • 您可以控制要导入的类列表(如果您不想要一个类,因为它很大或不起作用,它永远不会被包含在内)
  • __autoload 函数并不复杂。如果您的类处于复杂的层次结构中,您只需键入名称,无需编写复杂的代码即可找到正确的文件。
  • 更易于调试:可能令人担忧的代码范围仅限于您所做的包含。

这真的是编码风格的问题。

【讨论】:

    【解决方案2】:

    我认为我最同意 Cygal 的观点,但我想修改回复,考虑到 PSR-0。如果您不遵守该标准,我认为使用自动加载没有多大意义。

    专业版自动加载

    • 无需维护包含列表。
    • 您只包含您真正需要的内容。
    • 代码仍然可读。
    • 您遵循所有主要 PHP 框架采用的标准,因此您可以期望人们熟悉这种方法。

    专业老款

    • 依赖项在代码文件的标题中很容易看到。
    • 类名和文件路径之间没有必要的映射。如果您经常使用自动加载,则可能需要通过使用缓存来减少重复计算此映射所浪费的时间。

    总结:我看不出有任何理由避免自动加载只要您遵循 PSR-0

    【讨论】:

      【解决方案3】:

      使用自动加载器总是有利的。

      • 您不需要在每个文件的顶部收集大量包含 文件
      • 您不必担心忘记包含
      • 自动加载器 仅包含必要的文件,并且在需要时包含这些文件

      潜在的缺点

      • 您的自动加载器和您想要的库使用的自动加载器之间发生冲突

      使用 spl 注册您的自动加载器可以避免潜在的缺陷

      【讨论】:

        【解决方案4】:

        马克说的。此外,如果这对您很重要,您可以保持代码 DRY。

        【讨论】:

        • 保持代码干燥是什么意思?如何判断我的代码是否潮湿?
        • DRY 是 Don't Repeat Yourself 的首字母缩写词,它通常是一个很好的理念,可以让您的代码更易于维护。如果您在多个 php 文件的顶部包含一堆库,并且后来决定不需要库或想尝试不同的库,则可能需要更新多个位置。
        【解决方案5】:

        自动加载文件的好处是您不必担心自己加载文件。并且文件仅在需要时才会加载。

        更新的自动加载功能更好:http://php.net/manual/en/function.spl-autoload-register.php

        【讨论】:

          猜你喜欢
          • 2011-10-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多