我正在努力扩展课程,如果这是最好的方法,我仍然没有想法
假设主要类与上面类似(请记住表中的字段超过2个,但出于演示目的,我只写了2个字段):
Class Product () {
public $id, $product;
protected $sql;
public function __construct() {
$this->connect = Singleton::getconnect();
}
public function __destruct() {
$this->connect = null;
}
public function insert_product() {
$this->sql = 'INSERT INTO sh_products (id,product) VALUES (NULL, "'.
addslashes($this->product) . '")';
$return_id = $this->connect->mysql_execute($this->sql);
return $return_id;
}
public function update_product() {
$this->sql = 'UPDATE sh_products SET '.
'product="' . addslashes($this->product) . '"'.
'WHERE id = ' . $this->id;
$aff_row = $this->connect->mysql_execute($this->sql);
return $aff_row;
}
}
现在,我有第二张表存储产品的价格。该表格为sh_product_service_prices
。
使用sh_product table
同时更新sh_product_service_prices
的最佳方法是什么?
所有用户输入都在同一页面上,但我不会选择修改第一个类,而是创建另一个可以扩展Product类的用户。
sh_product_service_prices的字段结构如下所示:
id | idp (product id) | price
我想使用update_product()
程序,但在该程序中还要添加价格信息或类似的东西......
但作为第二个问题,当我从Product类调用更新过程时,我希望更新所有字段。
有人可以帮助我找到一个不需要改变头等舱的解决方案吗?
答案 0 :(得分:2)
对于新类(让我们称之为ProductPrice
)来扩展Product
类没有意义,因为Product
类逻辑上包含ProductPrice
类。理想情况下,您应该将ProductPrice
成员变量添加到Product
类,并执行以下操作:
class Product ()
{
/**
* @var ProductPrice
*/
private $price;
...
public function update_product()
{
// Product save logic
...
$this->price->save();
}
}
如果您绝对希望ProductPrice
延长Product
,我会停下来并真正考虑您的理由。话虽如此,您可以通过parent
关键字从孩子那里调用父方法。
class ProductPrice extends Product
{
public function update_product()
{
// ProductPrice update logic goes here
...
// This will call Product::update_product()
// If you don't include this line, Product::update_product() will NOT be called
parent::update_product();
}
}