包括类文件PHP


Including class files PHP

我一直在尝试学习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只有优势。但确实有一些。

__自动加载的优点

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

普通方式的优点

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

这实际上是一个编码风格的问题。

我想我最同意Cygal的观点,但我想在考虑PSR-0的情况下修改响应。如果你不遵守这个标准,我认为使用自动加载没有多大意义。

Pro自动加载

  • 无需维护包含列表
  • 你只包括你真正需要的东西
  • 代码保持可读性
  • 您遵循所有主要PHP框架采用的标准,因此您可以期待人们熟悉这种方法

亲旧风格

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

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

使用自动加载器总是很有优势的。

  • 您不需要在每个文件
  • 你不必担心忘记包含
  • 自动加载器仅包括必要的文件,以及需要的文件

的潜在缺点

  • aotoloader和所需库使用的自动加载器之间的冲突

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

马克说了什么。此外,如果这对您来说很重要,您可以保持代码干燥。

自动加载文件的优点是您不必担心自己加载文件。并且这些文件只有在需要的时候才会被加载。

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