我有以下类继承的情况:
class Entity
{
public $db; //connection
...
}
和类客户和产品扩展实体类:
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 ['cdesc'],$ this-> cdesc = $ row ['cdesc']等。(在此处查看我的其他文章)。
现在,我想将此功能从子级拉到父类Entity并由所有子级继承,但是有一个问题。$ this-> $ key = $ val的此函数动态填充(尝试填充)父类变量,而我想填充子类变量。如何定义此函数填充子类变量?(我想在这里使用类似于child :: $ key = $ val的方法,但是child ::不存在)。
也许我缺少了一些东西,但是您可以使该函数受保护,然后在子类中对其进行访问:
class Entity
{
protected $db; //connection
protected function populate($row)
{
foreach($row as $key=>$val) $this->$key=$val;
}
}
class Customer extends Entity
{
public $cname;
public $cdesc;
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;
public function fetch()
{
$sql="SELECT pname,pdesc FROM products";
$rst=$this->db->query($sql);
$row=$rst->fetch_assoc();
$this->populate($row);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句