包括PHP文件的类文件

时间:2012-02-06 13:09:06

标签: php class autoload

我一直在努力学习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.");
}

我只是想知道自动加载方式是否有任何优势或劣势?

5 个答案:

答案 0 :(得分:3)

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

__autoload

的优点
  • 你不需要保留那长长的包含列表,这可能是一个很难保持整洁的痛苦(这意味着没有忘记包含)
  • 你只包括你真正需要的东西:某些特殊情况下可能只需要某些类,你可以避免它

正常方式的优点

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

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

答案 1 :(得分:1)

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

Pro Autoloading

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

Pro旧式

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

总结:只要您按照PSR-0 ,我认为没有理由避免自动加载

答案 2 :(得分:0)

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

  • 您不需要在每个顶部都包含大量的包含 档案
  • 您不必担心忘记包含
  • 自动加载机 只包含必要的文件,以及需要的文件

潜在的缺点

  • 您想要的图书馆使用的aotoader和自动加载器之间的冲突

使用spl

注册自动装带器可以避免潜在的缺点

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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