【发布时间】:2023-04-09 01:09:01
【问题描述】:
我有 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 实例会从producer 类实例中更改$data 的值,如何将它们分开?
谢谢。
【问题讨论】:
-
您开始提出有关受保护类变量的问题,但实际方法不使用它们。没有帮助 ;) - 为什么不在父类/基类中执行实际的 mysql 查询?
标签: php oop class variables scope