如何在PHP中的请求之间保持对象

Szt*_*upY 17 php state caching frameworks persist

我过去一直在使用rails,merb,django和asp.net mvc应用程序.他们共同的(与问题相关)是他们拥有建立框架的代码.这通常意味着创建持久的对象和状态,直到Web服务器被回收(如设置路由,或检查哪些控制器可用等).

据我所知,PHP更像是一个CGI脚本,每次运行时都会被编译成一些字节码,并且在请求之后它被丢弃.当然,您可以拥有会话,在同一用户的请求之间保留数据,并且我看到有像APC这样的扩展,您可以使用它来在服务器级别的请求之间保留对象.

我的问题是:如何创建一个像rails这样的PHP应用程序?我的意思是一个应用程序,在第一个请求设置框架,然后在第二个和后来的请求使用已经设置的对象.mod_php中是否有一些内置的缓存工具?(例如,存储已执行的php应用程序的已编译字节码)或者是使用APC或某些类似扩展来解决此问题的唯一方法?你会怎么做?

谢谢.

编辑:替代问题:如果我创建一个大的PHP应用程序,它具有非常大的设置时间,但运行时间较短(如上面提到的框架中)那么我应该如何"缓存"已经设置的东西(这可能意味着很多东西,除了可能是数据库连接,因为你已经在PHP中拥有持久连接).

为了证明大的设置时间:如果我使用PHP反射检查哪些对象可用并根据它设置运行时该怎么办?进行大量反射通常很慢,但只需要执行一次(并且仅在修改源代码时重新进行评估).

编辑2:那似乎是APC.它自动缓存字节码这一事实很有用.

ZZ *_*der 5

不确定APC是否是唯一的解决方案,但APC确实解决了您的所有问题.

首先,您的脚本将使用APC编译一次,字节码存储在内存中.

如果您需要花费很长时间进行设置,您还可以将其作为用户数据缓存在APC中.例如,我一直这样做,

            $table = @apc_fetch(TABLE_KEY);

            if (!$table) {
                    $table = new Table(); // Take long time
                    apc_store(TABLE_KEY, $table);
            }
Run Code Online (Sandbox Code Playgroud)

使用APC,每个服务器实例只执行一次创建表的任务.

  • 为什么你要压制`apc_fetch`?**`afc_fetch`在成功时返回存储的变量或变量数组; 失败时错误**. (5认同)
  • @Alix Axel脚本运行得太快了. (4认同)