2012-03-12 63 views
1

我有2個繼承自father類的類。 「父級」類有一個protected變量,這個變量正在填充在child這兩個類中,每個類都爲它填充不同的數據庫信息。類繼承和實例交互

我的問題是,當我創建兩個類的實例時,第二個實例更改第一個實例的值。

下面是代碼:

class User 
{ 
    //array with the MySQL Server details// 
    private $serverInfoArray = array("host" => HOST, "user" => USER, "pass" => PASS); 

    protected $data; //This will be populated with data in both of the "child" classes. 

    //some database connection functions....// 

    public function setData(){} //implemented on "child" classess 

    public function getData(){} //implemented on "child" classess 

} 

,這裏是一個child類:

class Producer extends User 
{ 

    function __construct($id) 
    { 
     $this->setData($id); 
    } 

    public function setData($id) 
    { 
     global $serverInfoArray, $data; 
     $connectionFB; 

     $query = "MY FIRST QUERY"; //IN THE SECOND CHILD CLASS 
            //IT HAS DIFFERENT QUERY 

     $result = mysql_query($query, $connectionFB); 

     $i=0; 

     while($row = mysql_fetch_array($result)) 
     { 
      $data[$i] = $row; 
      $i++; 
     }  
    } 

    public function getData() 
    { 
     global $data; 
     return $data;  
    } 
} 

第二類具有相同的結構,但其名稱不同,正在執行的查詢。其聲明是class Account extends User

當我創建2個實例:

$producer = new Producer($_SESSION['PRODUCER_ID']); 
$account = new Account($_SESSION['ACCOUNT_ID']); 

,並做到這一點:

var_dump($producer->getData()); 

我得到的是由第二查詢填充的$data值。如果我不創建account實例,它將返回第一類中填充的值。

爲什麼account實例從producer類實例更改$data的值,我如何區分它們?

謝謝。

+1

你開始關於受保護的類變量的問題,但實際的方法不使用它們。沒有幫助;) - 爲什麼你不在父/基類中做實際的mysql查詢? – hakre 2012-03-12 14:27:26

回答

3
  1. 刪除以下行:

    global $serverInfoArray, $data; 
    
  2. 使用$this->serverInfoArray & $this->data訪問類變量。

+0

謝謝,我確定知道使用'$ this',但是因爲我在訪問類變量時遇到了輸入錯誤('$ this - > $ data'而不是'$ this-> data'),我遇到了問題並開始放棄全局定義......現在一切都很好,我再次安排了我的思想,謝謝:) – 2012-03-12 15:51:32

0

$ data不是全局變量,那麼爲什麼使用global

您應該使用$this->data$this->serverInfoArray

+0

我試過使用它,但它沒有填充結果數組 – 2012-03-12 14:25:34

+0

你也應該使用$ this-> serverInfoArray – soju 2012-03-12 14:26:05

+0

@Alon_A你應該使用$ this,當你引用類變量時 – 2012-03-12 14:30:08