2012-09-06 43 views
1

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

,或者一旦我实例,像这样?:

$ajax = new ajax(); 

或者将服务器只缓存,我特别要求?:

$ajax->make_request(); 

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

+0

即使您的类和函数跨越几千行文本,对单个图像操作,编写不好的数据库查询句柄或其他许多事情而言,内存影响可能非常小。减轻每个文件中只包含正确类的麻烦,同时触及更多正在使用的内存。无论如何,代码的内存可能会与前面几个与'= new ....'实例化的对象相比,显得苍白无力。 – Fluffeh

回答

8

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

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

如果index.phpinclude的另一个文件,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

4

你需要的是所谓的“自动加载”的逻辑, 这个过程中magicaly包括类Ajax当php可执行文件命中new Ajax();指令时。

这样,从来没有无用的类加载到内存中。

看看PSR-0和这个好ClassLoader component

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

2

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

相关问题