使用模块重写已重写的类-Prestashop 1.6

使用模块重写已重写的类-Prestashop 1.6,prestashop,prestashop-1.6,prestashop-1.7,Prestashop,Prestashop 1.6,Prestashop 1.7,我知道这个问题与编程没有特别关系。但我真的想了解PRESTASHOP通过模块重写文件的行为 我想扩展一个MYSQL表,比方说,Orders。模块的安装方法中的原始sql查询将获得此结果,这没有问题。但是我想把这个专栏也添加到Order模型中,这就是主要问题所在。因为我必须这样覆盖它: public function __construct($id = null, $id_lang = null) { parent::__construct($id, $id_lang);

我知道这个问题与编程没有特别关系。但我真的想了解PRESTASHOP通过模块重写文件的行为

我想扩展一个MYSQL表,比方说,
Orders
。模块的安装方法中的原始sql查询将获得此结果,这没有问题。但是我想把这个专栏也添加到
Order
模型中,这就是主要问题所在。因为我必须这样覆盖它:

  public function __construct($id = null, $id_lang = null)
  {
    parent::__construct($id, $id_lang);
    self::$definition['fields']['new_column'] = array('type' => self::TYPE_STRING);
  }

我的问题是,如果
override
目录已经有一个
Order.php
\uuu构造
,我如何确保它合并更改而不是抛出错误。。有可能吗?

Prestashop根本不鼓励在模块内使用覆盖。因为我怎么知道,没有办法合并两个覆盖,只有最后一个将工作,如果你能找到一种方法来安装一个模块与第二个覆盖。因此,他们建议扩展现有类并从中添加所有必要的数据。例如,在您的情况下,应该是这样的

class Order extends OrderCore
{
    public $new_filed;

    public function __construct($id = null, $id_lang = null)
    {
        Order::$definition['fields']['new_column'] = array('type' => self::TYPE_STRING);
        parent::__construct($id, $id_lang);
    }
}

只需在模块中包含这个类文件。因此,如果在另一个模块中包含类似的内容,则不应出现冲突,除非属性具有相同的名称。

比方说,商店开发人员已经使用其中的_构造方法创建了此类重写,如果我的模块也注册了同一类和方法的重写,Prestashop会允许我的模块安装吗,我认为这个问题与本例中的覆盖类似,唯一的区别是您将被允许安装模块,但结果是您将得到一个关于类重新声明的致命错误,并且任何文件都不会在覆盖文件夹中重写。因此,总结而言,我们通常应该尽量避免使用覆盖。。。?