2011-02-25 134 views
1

這應該是如此簡單。我有一個PHP類,它具有自定義方法來返回有關對象的信息。我想使用自定義方法來確定是否在對象中設置了特定參數。如果已設置,則返回該屬性。否則,該方法應聯繫數據庫以獲取信息並設置對象的屬性PHP:無法在對象方法中設置對象屬性?

但是,每次運行下面的代碼時,都會顯示該對象的屬性未設置。 retrieve_user_first_name方法每隔時間訪問數據庫訪問對象

我試着檢查使用is_null,空,isset屬性的值。我感覺像一個塗料。

require_once('dbaccess.class.php'); 

class User { 
    protected $user_id; 
    protected $first_name; 

function __construct($user_id) 
    { 
    $this->user_id = $user_id; 

    } 

function __get($variablename) 
    { 
    return $this->$variablename; 
    } 

function __set($variablename, $variablevalue) 
    { 
    $this->$variablename = $variablevalue; 
    } 

function __destruct() 
    { 

    } 

function retrieve_user_first_name() 
    {  
    if(!isset($this->first_name)) { 
     $dbAccess = new DBAccess(); 
     $strFirstName = $dbAccess->retrieve_user_first_name($this->user_id); 
     $this->first_name = $strFirstName; 
    } 
    else { 
     $strFirstName = $this->first_name; 
    } 
    return $strFirstName; 
    } 

} 
+1

什麼是調用它的代碼?你創建的代碼是什麼確定變量沒有被設置?它看起來對我來說很好,幾乎看起來很粗糙。也許你無意中在某處實例化了一個新對象,而不是重複使用舊對象,這會破壞你的應用程序? – rockerest 2011-02-25 16:48:33

+0

嘗試'print_r/vardump'操作後的對象...它看起來對我的眼睛沒問題。你如何維護/堅持對象? – 2011-02-25 16:49:37

+0

你的代碼適合我。我實例化了一個User實例,然後調用了retrieve_user_first_name()兩次。第一次設置$ this-> first_name,第二次使用第一次設置的值。我的猜測是你在調用之間創建了一個新的對象實例。 – qbert220 2011-02-25 16:53:44

回答

1

您發佈的代碼工作正常。

我認爲問題在於,在訪問此對象的任何代碼中,您沒有對順序調用使用相同的對象。

因此,像:

$ob = new User(); 
$ob->retrieve_user_first_name(); 

$ob = new User(); 
print $ob->first_name; 

正在發生的事情。顯然,這可能不是那麼公然,但這是對你的問題最簡單的解釋。

唯一的其他選擇是,你發佈的代碼是所有數據庫調用都返回空字符串或失敗,所以變量永遠不會被更新。這是一個很好的可能性,所以請在代碼中檢查這兩個選項。

+0

OMFG。咄。是的,就是這樣。我只是嘗試將對象移交給另一個頁面,它工作得很好。星期五上午白癡。謝謝! – Rob 2011-02-25 17:37:51

相關問題