首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >包括类文件PHP

包括类文件PHP
EN

Stack Overflow用户
提问于 2012-02-06 21:09:06
回答 5查看 3.5K关注 0票数 2

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

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

代码语言:javascript
运行
复制
<?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 autoload方法调用目录中的每个文件来自动执行该过程,如下所示(来自php手册):

代码语言:javascript
运行
复制
function __autoload($name) {
    echo "Want to load $name.\n";
    throw new Exception("Unable to load $name.");
}

我想知道以自动加载的方式做这件事有什么好处或坏处?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-02-06 21:20:52

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

__autoload的优点

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

正常方式的优点

对于anybody

  • Looking来说,在includes中很容易理解,includes会告诉你文件正在做什么,你可以控制你正在导入的类的列表(如果你不想要一个类,因为它太大或者不能工作,它永远不会被包含在内)

  • __autoload函数没有任何复杂性。如果您的类位于复杂的层次结构中,则只需键入名称,而无需编写复杂的代码即可找到正确的文件。

  • 更易于调试:可能令人担忧的代码的范围仅限于您做过的includes。

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

票数 3
EN

Stack Overflow用户

发布于 2012-02-06 21:56:25

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

Pro自动加载

  • 无需维护包含列表。
  • 您只包含您真正需要的内容。
  • 代码保持可读性。
  • 您遵循所有主要

框架采用的标准,因此您可以期待人们熟悉这种方法。

支持旧风格

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

总而言之:只要你遵循PSR-0,我就看不到任何避免自动加载的理由!

票数 1
EN

Stack Overflow用户

发布于 2012-02-06 21:15:55

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

  • 您不需要在每个文件的顶部包含大量的include
  • 您不必担心忘记include
  • 自动加载器只包含必要的文件,并且当它们需要时

潜在的缺点

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9160563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档