如何整合/消除类文件的PHP包含

如何整合/消除类文件的PHP包含,php,class,optimization,hierarchy,Php,Class,Optimization,Hierarchy,我有多个单独保存的文件。我想把它们都放在一个文件中,以减少文件I/O,并且只包含一个 更新 最后使用了一个自动加载程序,这里是php.net。现在,我不必显式地包含每个文件,根据引用,这些文件是延迟加载的。PHP将解析该文件。PHP可能会注册这些类,并且在任何情况下都会对文件进行解析和语法检查。但这可能仍然比加载单独的文件快。更多单独的文件I/O速度会更慢,尽管它需要更少的内存,因为只加载所需的文件 我也不担心,因为单是类的内存消耗就接近于零。文件I/O也可能不是问题。您可能有APC缓存,它将P

我有多个单独保存的文件。我想把它们都放在一个文件中,以减少文件I/O,并且只包含一个

更新


最后使用了一个自动加载程序,这里是php.net。现在,我不必显式地包含每个文件,根据引用,这些文件是延迟加载的。

PHP将解析该文件。PHP可能会注册这些类,并且在任何情况下都会对文件进行解析和语法检查。但这可能仍然比加载单独的文件快。更多单独的文件I/O速度会更慢,尽管它需要更少的内存,因为只加载所需的文件

我也不担心,因为单是类的内存消耗就接近于零。文件I/O也可能不是问题。您可能有APC缓存,它将PHP文件的编译版本保存在内存中,如果没有,您的操作系统可能会有一些缓存功能,这会导致加载经常使用的文件更快。

如果您正在开发这些文件,您绝对不应该将所有类放在一个文件中。这使得事情很难维持。每个类都有一个单独的文件,这意味着您确切地知道在哪里更改某些内容。是的,PHP会花时间解析您不使用的类。你为什么不想用自动装弹机?它们让事情变得容易多了,而且它们不像是很多开销或其他什么

如果您担心IO效率,请缓存代码

关于命名约定,我建议您在这里查看一个被广泛接受的标准:


虽然没有什么能阻止您将所有类对象合并到一个文件中,但这样做将违背基本的代码设计理念,并最终创建一个整体文件进行管理

如果您正在考虑创建一个单独的类来require(),我建议将您的各个类保留为它们自己的文件,并使您的consolidate.php看起来更像这样:

<?php
    /** consolidate.php **/
    require( "class.session.php" );
    require( "class.general.php" );
?>


至于PHP处理,对文件调用require()或include()实际上并不调用对象上的任何构造方法。也就是说,它包含了整个文件。例如,包括session.php(2KB)和general.php(3KB)只包括5KB。根据您的代码库,包含所有内容可能会显著增加该大小。

为什么不使用自动加载?它通常很好地解决了这个问题。很难理解什么是语言结构,什么是PHP函数。自动加载程序是否调用了更多需要PHP文件的代码?如果是这样,成本是否会更高。这是一个问题。自动加载器是您注册的功能。每次引用不存在的类时都会调用它。如果文件名可以从类名推断出来(例如,Foo存在于Foo.class.php中),那么您可以包含该文件并继续。它可能会比你事先准确地包含你需要的东西慢一些,但它的便利性远远弥补了这一点。糟糕的算法和低效的数据库模式是代价高昂的类型。。。不管你是否使用自动加载器。我现在使用的是自动加载器…它声称它也执行延迟初始化…所以,我将合并到一个文件中。最好的情况是编译后的版本将保存在内存中,每个单独的调用只需根据需要提取每个对象,而无需进行重新分类和重新同步检查。另外,我将通过只加载一个文件来获得一些收益。内存消耗是没有意义的。这是对的?那是对的。我承认我喜欢将不同的类放在不同的文件中,以保持功能的独立性和可读性。我使用自动加载程序加载文件。这也很有效,我喜欢用这种方式构造代码,但我的exposal确实有一个APC缓存;-)对于另一个网站,我没有,但它的访问者要少得多。我甚至懒得去衡量那里的表现。它的性能足够好,可读性对我来说也很重要。我不想把10万行代码放在一个文件中。虽然我相信一个文件对你来说会更快,但我建议你也考虑一下。如果您想长期维护代码,可读性和结构非常重要。过早优化是万恶之源。您可能不会测量非常大的性能差异。对……代码库足够小,我选择了唯一的标识符,这样我就可以使用控件F四处走动,而不是滚动。因此,如果我缓存代码,PHP将只知道创建所需的对象,即调用的对象,即使它们对应的类在一个文件中?请参阅。我认为维护是一个问题,但在转入生产之前合并文件是另一个问题。当然,它可能会搞砸,一定程度的质量是必须的。@Chris:当你缓存它时,它会将PHP文件解析成PHP可以轻松使用的格式,并将其存储在内存中。在此之后,它将使用任何函数或类的唯一时间是在代码中调用它们。