包含文件和使用 SPL Autoloader 之间的最大区别是什么。

What is the big difference between including files and using SPL Autoloader.

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

假设我有一个目录 "classes",其中包含子目录和 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。使用 include/require 与 SPL 自动加载相比,加载时间是否有差异?

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

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

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

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

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

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

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

3。与 SPL 自动加载相比,使用 include/require 加载时间是否有差异?

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

4. class 是否应该在一个目录下 "classes?" 还是我的文件结构没有问题?

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