1

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

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

$ajax = new ajax();

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

$ajax->make_request();

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

4

3 回答 3

9

我认为您对 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

于 2012-09-06T10:13:24.130 回答
4

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

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

看看PSR-0和这个优秀的ClassLoader 组件

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

于 2012-09-06T10:14:15.267 回答
2

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

于 2012-09-06T10:15:59.367 回答