Alon Adler
Alon Adler

Reputation: 4024

Class inheritance and instances interaction

I have 2 classes that inherits from a father class. The "father" class has a protected variable that is being populated in both of the child classes, each of the classes populates it with different information for a database.

My problem is that when I create instances of both classes, the second instance changes the the values from the first instance.

Here is the code:

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

}

and here are one the child classes:

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;    
    } 
}

The second class has the same structure but is different in its name and the query being executed. Its declaration is class Account extends User

When I create 2 instances:

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

and do this:

  var_dump($producer->getData());

I get the values of $data that was populated by the second query. If I wont create the account instance it will return the values of populated in the first class.

Why does the account instance changes the values of $data from the producer class instance, how can I separate them ?

Thanks.

Upvotes: 1

Views: 160

Answers (2)

abdul
abdul

Reputation: 61

  1. Remove the following line:

    global $serverInfoArray, $data;
    
  2. Use $this->serverInfoArray & $this->data to access class variables.

Upvotes: 3

soju
soju

Reputation: 25312

$data is not a global var, so why do you use global ?

You should use $this->data and $this->serverInfoArray

Upvotes: 0

Related Questions