【问题标题】:What is the big difference between including files and using SPL Autoloader.包含文件和使用 SPL Autoloader 之间的最大区别是什么。
【发布时间】:2016-02-17 17:14:46
【问题描述】:

我正在尝试开始使用 SPL Autoloader,但我似乎还无法理解它的重要性。

假设我有一个目录“类”,其中包含子目录和 php 文件,如下所示。

'classes/feed/feed.php';
'classes/compose/file_upload.php';
'classes/compose/char_limit.php';
'classes/feed/postrank/postrank.php';
'classes/notifications/push.php';

然后我在 "classes" 目录中创建一个名为 autoloader.php 的 PHP 文件,其中包含如下

<?php 

    include_once 'feed/feed.php';
    include_once 'compose/file_upload.php';
    include_once 'compose/char_limit.php';
    include_once 'feed/postrank/postrank.php';
    include_once 'notifications/push.php';

    ?>

然后在我想要这些类的每个页面上,我只包含 autoloader.php 文件以包含项目的所有类。

1.随着项目的发展,我将面临哪些问题?

2。如果我要开始使用 SPL Autoloader,我将如何使用我当前的目录结构来设置它?

3.与 SPL 自动加载相比,使用 include/require 的加载时间是否存在差异?

4.所有的类都应该在一个目录“类”下吗?还是我的文件结构没有问题?

【问题讨论】:

  • 在概念上有点类似于动态链接库。在需要时包含哪些文件,而不是一次包含所有文件。

标签: php class autoload spl


【解决方案1】:

1.随着项目的发展,我将面临哪些问题?

您必须在您的 autoloader.php 中包含越来越多的文件。另外,您必须将其包含在每个新文件中。更多文件读取。性能较差。

2。如果我要开始使用 SPL Autoloader,我将如何使用我当前的目录结构来设置它?

目录结构无关紧要(假设您的类树排列得很好且合乎逻辑)。重要的是您在类中指定的命名空间。例如,如果您希望 SPL 自动加载包含在您的 classes/feed/postrank/postrank.php 文件中的类(可能是 postrank 类声明),则该文件必须在其中包含命名空间声明,例如:

namespace classes\feed\postrank;
class postrank {
    ...
}

这样 SPL 将知道如何在应用程序的文件系统中找到类的声明。

3.与 SPL 自动加载相比,使用 include/require 的加载时间是否存在差异?

如果您在 autoloader.php 中包含所有内容,您会强制 PHP 读取并包含其中的每个文件。 SPL 仅加载您需要的类,并且仅在您需要它们时加载。如果您有相当数量的文件和类(例如数百个),则时间差异可能会很明显,具体取决于您的应用程序服务器性能。

4.所有的类都应该在一个目录“类”下吗?还是我的文件结构没有问题?

实际上取决于您的应用程序结构,因此完全由您决定。

【讨论】:

  • 好的,谢谢。你能详细说明一下 2 号吗?我要在每个页面上都包含自动加载器功能吗?该函数如何检测到我想使用特定类并仅加载该特定类而不加载所有类。
  • 你必须使用spl_autoload()函数。它既可以在您想在服务器上运行的每个文件的开头使用,也可以采用更好的路径并只为您的应用程序创建一个入口点,使用(例如)MVC 方法。如果不写一篇小文章,我无法在这里深入了解更多细节,但我相信您将能够根据我的建议找到更多信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-17
  • 2011-02-22
  • 2014-06-15
  • 2011-04-17
  • 2011-02-05
  • 2012-08-13
相关资源
最近更新 更多