【问题标题】:Multiple PHP classes in one file一个文件中的多个 PHP 类
【发布时间】:2012-09-06 10:08:16
【问题描述】:

我有多个 PHP 类,每个类大约有 20 个函数,都在一个 PHP 文件中。一旦我包含这个文件,服务器会在内存中存储每个类和每个函数吗?

或者它是否只会在我这样实例化后才加载类及其函数?:

$ajax = new ajax();

还是服务器只缓存我专门调用的函数?:

$ajax->make_request();

我想知道是否可以将这么多类和函数放在一个 PHP 文件中,或者我是否应该放入某种类型的逻辑,只包含工作所需的类和函数。

【问题讨论】:

  • 即使您的类和函数跨越几千行文本,对于单个图像操作、编写不佳的数据库查询句柄或许多其他事情而言,内存影响也可能非常小。权衡在每个文件中只包含正确的类而不是暂时使用更多内存的麻烦。无论如何,与使用= new .... 实例化的前几个对象相比,代码的内存可能会相形见绌。

标签: php class caching


【解决方案1】:

我认为您对 PHP 的工作原理有些困惑。

PHP 解析器的每个请求都会解析请求的文件,例如index.php

如果index.php include 是另一个文件,PHP 将解析该文件。

一旦 PHP 文件被解析,它就会在请求期间以“字节码”(几乎是一种机器语言)存储在内存中。

无论一个文件中有多少个函数或类,都会为该请求存储在内存中。

有像 APC 这样的扩展在请求之间将这些解析的字节码缓存在内存中,但它们需要添加到 PHP 中。

但是(就内存使用而言)为您的类使用自动加载会更好。

http://php.net/manual/en/language.oop5.autoload.php

PSR0 是一套很好的自动加载类指南:

https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md

【讨论】:

    【解决方案2】:

    您需要的逻辑称为“自动加载”, 这是当 php 可执行文件遇到new Ajax(); 指令时神奇地包含类Ajax 的过程。

    这样,内存中永远不会加载无用的类。

    看看PSR-0和这个好ClassLoader component

    (如果您的项目只有 20 个类,则无需添加自动加载器 - 利润将非常低)。

    【讨论】:

      【解决方案3】:

      不,默认情况下服务器不会缓存任何内容,除非它设置为使用 APC 或类似扩展来缓存内容。因此,如果您的代码使用所有这些类,那么最好将它们放在一个文件中以减少 I/O。但如果你不使用,请将代码分成逻辑类,放入单独的文件并使用autoloading

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-06
        • 2014-08-02
        • 2016-10-25
        • 2014-08-03
        • 1970-01-01
        • 2012-04-18
        相关资源
        最近更新 更多