2011-03-16 107 views
0

我會讓這個過於複雜,只是將其分解爲主要部分。更新PHP類以外的類變量

我有一個表單,當表單被提交時改變變量的布爾值,但是它被函數調用,函數必須改變變量。

class updates 
{ 
    var $yesno = false; 

    function updateBool() 
    { 
     $this->yesno = true; 
    } 
} 

所以當表單被提交,它會調用$up->updateBool()布爾更改爲true。當我做var_dump($up->yesno)時,它說false它應該是true。如果我這樣做:

class updates 
{ 
    var $yesno = false; 

    function updateBool() 
    { 
     $this->yesno = true; 
     var_dump($this->yesno); // <-- outputs true 
    } 
} 

所以,我怎麼就不能得到變量在一個單獨的劇本打印出來true

編輯:

$sql = "SELECT boolean 
     FROM config 
     WHERE boolean = 'true'"; 

$result = mysql_query($sql); 

if(mysql_num_rows($result) > 0) 
{ 
    $up->updateBool(); 
} 
else 
{ 
    header("Location: index.php?d=none"); 
} 

這是它被調用的代碼的一部分。我可以確認SQL語句中有多條記錄。

+1

當它返回'false'時,請顯示您使用的確切代碼。 – 2011-03-16 21:46:57

+0

已添加代碼。 – MacMac 2011-03-16 21:53:10

+0

什麼時候你正在做var dump?' – 2011-03-16 21:55:20

回答

1

所以當表單被提交,它會調用$上調> updateBool()來改變布爾真

你似乎被切換到新的頁面,在這裏$up將是一個新的對象。對象不會在請求中持續存在。當你調用一個新頁面時,PHP「失去了它的內存」,並且所有的變量都是從頭開始的。

要在整個頁面請求中保留值,您需要使用類似sessions的內容。

+0

嗯。你的回答看起來很合理,我一直認爲在從一個頁面移動到另一個頁面之後,對象可以通過PHP傳遞。由於合理的答案,我會接受你的答案。 – MacMac 2011-03-16 22:00:54

+0

@lolwut會話通常是這樣的,儘管你不應該把太多的數據放入會話中。對於一個花哨的先進的快速方法來堅持對象,請參閱http://stackoverflow.com/questions/2940610/how-to-persist-objects-between-requests-in-php – 2011-03-16 22:01:59

+0

爲了傳遞周圍的物體,您需要啓動一個會話,然後將該對象分配給會話變量。否則,所有對象只存在於頁面的整個生命週期中,並且每次請求頁面時都會重新創建。 – 2011-03-16 22:02:59

0
class updates 
{ 
    public $yesno; 
    function __construct(){ 
     $this->yesno = false; 
    } 

    function updateBool() 
    { 
     $this->yesno = true; 
    } 
}