1

在我的项目结构中,我有一个通常的每个文件分离的类,并且自动加载很容易,但现在我想将一些小类分组到一个文件中,可能是一个具有当前文件夹名称的文件。

现在:

|/module
|-Smallclass1.php
|-Smallclass2.php
|-Smallclass3.php
|-Normalclass.php

后:

|/module
|-module.php  <-- smallclasses go here
|-Normalclass.php

现在是辩论。要自动加载一个“SmallclassX”,我想检查SmallclassX.php文件是否存在,如果不存在,则检查module.php是否存在,如果存在,请检查文件中是否存在该类并将其包含在内。当我需要一个类时包含整个module.php文件似乎是一种开销,特别是如果文件包含许多类。在这里,他们建议使用标记检查类是否存在,但我不确定它的效率,之后我需要一个方法来仅包含我需要的类。

你认为如果我像我提到的那样只加载我需要的类,是否也会因为多次读取文件并查看内部包含我想要的代码而产生开销?

4

1 回答 1

1

您可以使用spl_autoload_register堆叠自动加载器,允许您首先尝试从专用文件加载类,然后回退到包含模块文件(如果没有自动加载器可以解决依赖关系,则正常出错)。这将允许您通过解析令牌和其他项目来避免所有黑客攻击,这将需要更多的东西,而不仅仅是要求文件并查看之后的结果。

但是,我建议您对此解决方案进行基准测试。是否更有效将取决于访问文件(APC)的延迟以及单独解析和包含每个类的成本。

我也同意其他评论,您有两个单独的包含类的方案可能会令人困惑,而且 APC 无论如何都会消除拥有单独文件的大部分成本。

于 2012-10-17T14:05:12.483 回答