2012-10-22 36 views
-2

我有這樣一個類:困惑類之間處理瓦爾

class sqlClass { 
    var $myvar = "test value 1" 
    public function test01() { 
    global $myvar; 
    //some operations here 
    $myvar = "test value 2" 
    return true; 
    } 
} 

在其他文件中我有這個PHP腳本:

include_once('functions.php'); // where my class is 
$data = new sqlClass(); 
if ($data->test01()) { 
    echo $data->myvar; 
} else { echo "No value"; } 
在這個例子中 test01()總是正確的

嘛,所以我有保證$myvar改變,但是,當我在應該改變它的值的類中執行函數後打印$myvar時,它會打印舊值「測試值1」而不是「測試值2」。那麼,我錯過了什麼?

回答

4

好吧,首先你不應該使用var關鍵字。這就是你不應該使用的php4,除非你正在維護一個傳統的應用程序。而是使用the visibility keywords - public,protected, or private之一。

其次你不應該在一個班級內使用global不應該有需要。要訪問您使用$this->memberName的類成員,如果您需要訪問類外部的變量,則應將這些變量作爲參數傳遞給您的方法或構造函數。

所以給出的所有,這是你的代碼應該是什麼樣子:

class sqlClass { 
    public $myvar = "test value 1"; 

    public function test01() { 

    //some operations here 
    $this->myvar = "test value 2" 

    return true; 
    } 
} 

說了這麼多,我會讀OOP in the manual for php5

整節
0

要改變對象的實例變量,使用$this->

class sqlClass { 

    public $myvar = "test value 1" 

    public function test01() { 
     $this->myvar = "test value 2" 
     return true; 
    } 

} 

,這將改變變量$data->myvar。你在做什麼global意味着它正在改變全局變量myvar,你用echo $myvar輸出。它與對象$data無關。