一个文件中有多个PHP类

时间:2012-09-06 10:08:16

标签: php class caching

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

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

$ajax = new ajax();

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

$ajax->make_request();

我想知道在一个单独的PHP文件中放置如此​​多的类和函数是否可以,或者我应该放入某种类型的逻辑,其中只包含作业所需的类和函数。

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:4)

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

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

请看PSR-0这个好ClassLoader component

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

答案 2 :(得分:2)

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