我有多个PHP类,每个PHP文件大约有20个函数。一旦我包含这个文件,服务器会存储内存中的每个类和每个函数吗?
或者它只会在我实例化后加载类及其函数吗?:
$ajax = new ajax();
或者服务器是否只缓存我专门调用的函数?:
$ajax->make_request();
我想知道在一个单独的PHP文件中放置如此多的类和函数是否可以,或者我应该放入某种类型的逻辑,其中只包含作业所需的类和函数。
答案 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。