类继承和实例交互

时间:2012-03-12 14:18:43

标签: php oop class variables scope

我有两个继承自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 个答案:

答案 0 :(得分:3)

  1. 删除以下行:

    global $serverInfoArray, $data;
    
  2. 使用$this->serverInfoArray& $this->data访问类变量。

答案 1 :(得分:0)

$ data不是全局变量,为什么要使用global

您应该使用$this->data$this->serverInfoArray