PHP扩展现有的类用于表插入/更新

时间:2015-06-06 16:14:19

标签: php mysql class oop

我正在努力扩展课程,如果这是最好的方法,我仍然没有想法

假设主要类与上面类似(请记住表中的字段超过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类调用更新过程时,我希望更新所有字段。

有人可以帮助我找到一个不需要改变头等舱的解决方案吗?

1 个答案:

答案 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();
    }
}