2013-07-15 49 views
0

這裏是我的問題:在Python(作爲web框架)或Java WEB應用程序(簡單的servlet應用程序或複雜的struts2/wicket /任何框架)中考慮Django或web2py。它們共享至少兩件我喜歡的東西:在PHP中有一箇中心/主要上下文嗎?

  1. 有一種Context環境或從請求或會話上下文中訪問數據的方式(即全局數據,單例,池......任何可共享內存價值觀和行爲)。
  2. 類加載/初始化一次。也許我錯過了一些東西,但在PHP中AFAIK一個類被加載和初始化的每個請求的基礎(所以,在一個普通的類,如果我(例如)修改一個靜態值,這將只生活在當前的請求,甚至同時請求觸發該值將得到不同的值)。

有沒有辦法讓它在PHP中?例如在Python/Django中,我可以聲明一個普通的類,並且該類可以保存靜態數據或成爲一個真正的單例(也可以是一個池或一種中央隊列管理器),並且在django服務器死亡之前它將是同一個對象(注意:python中的模塊在導入時保持加載到python上下文中)。

+1

除非您使用某種應用程序服務器,否則腳本的環境將根據每個請求進行設置/拆除。除非您自己提供,否則PHP本身不提供持久性(忽略$ _SESSION)。 –

+1

[APC](http://php.net/manual/en/book.apc.php)提供了將數據存儲到緩存中的功能,該緩存可以保持跨請求。但除了這樣的系統之外,不,因爲php在每次請求後完全退出。 – Anigel

+0

uuuh :(我有很長一段時間與python,並認爲PHP 5.5會增加類似的東西。可惜,我喜歡那個「功能」(真正的特點是,我提到的其他工具明確區分每請求代碼與非請求代碼)。 –

回答

0

PHP的「上下文」基於每個請求生存的事實對於語言如何與Web服務器一起工作而言非常核心。

如果你想獲得它的工作更加像Java或其他語言,其中的數據沒有得到重置每一個請求,你基本上有兩種選擇:

  • 序列化的數據到一個文件中,DB,不管,並重新加載它的下一個請求
  • 而是通過Web服務器提供服務的頁面,使用PHP

序列化數據到存儲和重新加載它在後續請求是典型的方法寫的服務器。

儘管可能的話,在PHP本身編寫服務器並不是我會推薦的。儘管付出了很多努力,但PHP仍然存在不良內存管理問題,並且很可能在長時間運行的PHP進程中遇到內存泄漏。

相關問題