2010-01-09 33 views
1

我有一個Flash應用程序,它使用單個php文件從數據庫檢索記錄(使用Zend框架)。當應用程序第一次開始時,我打電話給php來設置一個類變量,以便將來對數據庫的所有請求都將使用此變量根據其值選擇記錄。因此,這裏的類是如何開始的:Zend PHP類可變保留MySQL查詢

class MyClass 
{ 

    private $animal = ""; 

    public function setAnimal($anim) { 
     $this->animal = $anim; 
     echo($this->animal); //this correctly prints the variable I passed in 
    } 

後來,根據用戶的輸入,我做出此一等級不同方法的調用,但它彷彿類變量$動物已經被人遺忘,因爲它沒有不再有對類的任何後續訪問值:

public function getAnimals() 
    { 
     echo('getAnimals: '); 
     echo($this->animal); //this prints nothing - as if it doesn't know what "animal" is 

     $result = mysql_query("SELECT * FROM animals WHERE animal='$this->animal'"); //and therefore this query doesn't work 
     $t = array(); 

     while($row = mysql_fetch_assoc($result)) 
     { 
      array_push($t, $row); 
     } 

     return $t; 
    } 

所以我的問題是,我怎樣才能得到一個PHP類變量堅持這樣我就可以將它設置一次,我可以在任何時候訪問應用程序的生命?

回答

2

我可能會誤解你的問題,但這聽起來像你先從Flash中調用PHP腳本,然後再從Flash中調用PHP腳本,期待某個變量要設置?

如果是這樣的話,那也是問題所在。 PHP是無狀態的。每次訪問PHP腳本(即請求URL)時,都會從頭開始重新創建PHP環境。只要請求完成並且PHP腳本完成執行,環境就會被破壞(即Web服務器線程關閉,PHP環境丟失)。您在第一次請求中設置或執行的任何操作都不會在您的第二次請求中存在。

如果您希望信息持續存在,您可以使用會話或cookie。由於您使用的是Flash,所以sessions可能是最好的選擇。第一次調用腳本時,生成一個會話令牌並將其傳遞迴閃存並顯示響應。在所有後續調用中,您的Flash應提供會話令牌,並且您可以從$_SESSION存儲/獲取所需的任何狀態變量。

+0

是的,這就是我所害怕的。看起來我必須對會話和flash進行一些研究。謝謝。 – sol 2010-01-09 22:04:10