【发布时间】:2014-09-08 19:55:13
【问题描述】:
我有以下类继承的情况:
class Entity
{
public $db; //connection
...
}
Customer 和 Product 类扩展 Entity 类:
class Customer extends Entity
{
public $cname;
public $cdesc;
private function populate($row)
{
foreach($row as $key=>$val) $this->$key=$val;
}
public function fetch()
{
$sql="SELECT cname,cdesc FROM customers";
$rst=$this->db->query($sql);
$row=$rst->fetch_assoc();
$this->populate($row);
}
}
class Product extends Entity
{
public $pname;
public $pdesc;
private function populate($row)
{
foreach($row as $key=>$val) $this->$key=$val;
}
public function fetch()
{
$sql="SELECT pname,pdesc FROM products";
$rst=$this->db->query($sql);
$row=$rst->fetch_assoc();
$this->populate($row);
}
}
从这里可以看出,每个子类都有相同的函数populate($row),它从子类获取数据库行并填充相应类的变量;此函数自动填充变量:$this->cname=$row['cname']、$this->cdesc=$row['cdesc'] 等(看我的另一篇帖子here)。
现在我想将此函数从子类拉到父类 Entity 并由所有子类继承,但有一个问题。 $this->$key=$val 这个函数动态填充(尝试填充)父类变量,我想填充子类变量。如何定义该函数填充子类变量? (我想在这里有类似 child::$key=$val 但 child:: 不存在的东西)。
【问题讨论】:
-
您在这里使用的是 object 变量,而不是 class 变量(在 php 中由
static表示),并且没有子/父对象的关系。 -
在 Programmers 上发现重复:programmers.stackexchange.com/questions/151910/… - 摘录:不可能。
-
确实,我在这里使用对象变量而不是(静态和所有子共享的)类变量。问题仍然存在,如何在父类中定义一个会改变其子类变量的函数。
-
@sbrbot:是的,但是没有“子”或“父”对象之类的东西。只有类可以是“孩子”或“父母”。
-
你正在做的工作。您始终可以按名称修改变量。
标签: php oop inheritance