2010-06-08 109 views
0

我只是玩弄一些PHP,並想知道在另一個PHP腳本中創建一個類的對象時會發生什麼?一旦實例化了PHP中的類,會發生什麼?

我認爲一旦其創建和被處理的是沒有再回去,並從另一個腳本「玩」與它周圍的方式嗎?

是我想要創造出一種用卡類撲克牌的想法,每張卡都有添加到每個單獨的對象,使其獨特的具體數據,西裝,價值等,一旦其創建的我需要能夠返回到特定的卡片才能使用它們。在java中,我有一個卡對象的數組列表,我不知道如何在PHP中處理相同的區域。

謝謝。

回答

2

周圍有物體經過一個PHP腳本中沒有問題,你的問題是,PHP是Web服務器調用腳本本質上是「無狀態」。即每次有人從瀏覽器發佈URL時,都會啓動完整的PHP程序副本。

爲了節省時間之間的數據有幾種選擇: - 一個是使用與用戶會話相關聯,但$ _SESSION本身是一個數組,所以它變得非常笨拙這裏舉行復雜的結構,也$ _SESSION變量,它聽起來像你想分享用戶之間的甲板。

你可以連載您的對象並將其存儲在一個文件 - 這是OK,只要其不常更新 - 但如果由每個用戶更新他們將開始覆蓋其他的變化。

好多是存儲在數據庫中的甲板(SQLite是通常內置到PHP),使多個用戶能夠以可控的方式分享和更新。

另一個很好的選擇是使用流行的數據高速緩存中的一個,如「分佈式緩存」,這將緩存調用腳本之間的數據。

0

所以,你想創建一個serverside編碼cardsgame?祝你好運! 有可能做到這一點,我認爲你正在談論的JavaScript腳本更合適。 你可以創建一個函數,初始化一副紙牌並使用索引等。將你的東西保存在cookies /會話中,並使用回發。與jscript相比,我認爲這將會是一個糟糕的工作。

芹苴時,你想想看,你可以使用AJAX來使這個遊戲感覺的用戶:)好。

+0

我打算使用ajax,但我想了解如何保持甲板上的對象可用於我。在Java中,一旦它們被創建,它們將被存儲在我的數組列表中以供使用。我試圖在php中實現類似的東西。 – Julio 2010-06-08 07:15:06

+1

而且,您的確可以使用序列化。 – Younes 2010-06-08 07:31:51

1

在頁面調用之間重用對象似乎是您的問題。也許你可以序列化對象並將其存儲在數據庫中並將它拾起來?檢查php.net/serialize讓我們知道它是怎麼回事。

+0

這看起來很有前途,但是這個想法是串聯一副牌(52個物體)。序列化和非序列化的想法看起來很多工作。無論如何,我會給它一個鏡頭,看看會發生什麼並回到你身邊。感謝你的回答。 – Julio 2010-06-08 07:29:46

1

你可以做些什麼來保持提供給你的對象是序列化的對象,並將其存儲在數據庫中的表。如果你將一個遊戲ID或類似的卡片鏈接起來,那麼你可以稍後使用這個遊戲ID來檢索它們。

我不知道,如果你正在寫的cardgame是實時的,使用一個數據庫可能是太多的開銷。另一種可能性是使用現有的緩存解決方案,例如Memcache。

+0

這似乎是理想的。我原本以爲使用數據庫並且來回轉換似乎工作量太大,而且對於實時遊戲來說速度不夠快。假設證明在布丁中。 – Julio 2010-06-08 07:41:22

0

PHP腳本並不像Java服務器應用程序。 您的Java服務器將運行很長時間,您的PHP腳本將只是一次性的事情。而不是這種過程:用戶向Java運行的服務器發出請求,服務器在其無限循環之一接收請求,服務器對其進行處理,服務器發送響應,服務器等待新的請求;你有這樣的事情:一個網絡服務器(Apache,Nginx,無論其他網絡服務器)接收用戶的請求,理解它需要由PHP解釋,啓動一個PHP的孩子,這個孩子做腳本中的內容,發送它的答案,死亡,服務器等待新的請求。

所以,當一個PHP腳本結束時,它沒有任何東西(在良好的情況下)。

但是,php腳本可以在服務器上使用持久存儲,以便其他請求可以從中讀取。這就是爲什麼你有文件,數據庫,甚至共享記憶功能。

如果遊戲狀態僅適用於一個用戶,則可以使用會話(通常是文件)來存儲您的套牌對象。如果它意圖被多個玩家使用,則應該在序列化後將其存儲在數據庫中。

相關問題