Наследование классов и взаимодействие экземпляров - PullRequest
1 голос
/ 12 марта 2012

У меня есть 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 изменяет значения $data из экземпляра класса producer, как их можно отделить?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 12 марта 2012
  1. Удалите следующую строку:

    global $serverInfoArray, $data;
    
  2. Используйте $this->serverInfoArray & $this->data для доступа к переменным класса.

0 голосов
/ 12 марта 2012

$ data не является глобальной переменной, так почему вы используете global?

Вы должны использовать $this->data и $this->serverInfoArray

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...