类继承和实例交互



我有两个从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实例更改$dataproducer类实例的值,我如何将它们分开?

谢谢。

  1. 删除以下行:

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

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

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

最新更新