考虑此Prestashop 1.7模块M:
class M extends Module
{
public function __construct()
{
$this->c = new Negoce\Classes\C($this);
}
}
如您所见,我将其实例分配给class C
。后者的代码是:
class C {
public function __construct($mod) {
$mod->registerHook('actionObjectCustomerAddAfter');
}
public function hookActionObjectCustomerAddAfter($data) {
$client = $data['object'];
echo '<pre>';
echo ' $client ';
var_dump($client);
echo '</pre>';
exit;
}
}
预期的行为是:如果我在Prestashop中创建了一个客户,则将执行转储,并且也会执行,从而exit
导致包含转储文本的空白页。
实际的行为是:如果我在Prestashop中创建了一个客户,则转储不会执行,也不会执行转储exit
,从而导致包含新创建的客户的客户列表页面和一条通知,告知我已经创建了新客户。
可以通过不使用该类C
并在类中移动后者的代码来获得预期的行为M
。但是,C
出于可靠性和可维护性的目的,我真的想委托给。
我该怎么办?为什么不起作用?
我认为这是更好的方法:
class M extends C
class C extends Module
提示:您的“ registerHook”函数不应位于构造函数中。它必须在安装功能中。