我有两个继承自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
的值,如何将它们分开?
感谢。
答案 0 :(得分:3)
删除以下行:
global $serverInfoArray, $data;
使用$this->serverInfoArray
& $this->data
访问类变量。
答案 1 :(得分:0)
$ data不是全局变量,为什么要使用global
?
您应该使用$this->data
和$this->serverInfoArray