因此,在我的应用程序中有一个CONSOLE应用程序和WEB应用程序的情况。
现在,如果有人知道Yii2,那么他就会知道。有
yiisoft/yii2/base/ErrorHandler.php
由
扩展 yiisoft/yii2/web/ErrorHandler.php
(用于main.php配置中的WEB)
和
yiisoft/yii2/console/ErrorHandler.php
(main.php配置中的CON控制台)
现在,我要覆盖 yiisoft / yii2 / base / ErrorHandler.php 中的 handleException 函数。 ErrorHandler(web和console)都不会覆盖此方法。此方法仅在BaseErrorHandler中。
现在,我正在从WEB和CONSOLE扩展ErrorHandler。 因此,我必须在两个不同的文件/类中进行相同的更改。要使其正常工作。
如果我只想扩展BaseErrorHandler并在那里进行新类(仅一个类)的更改,并使它在扩展基类的两个类中可用,该怎么办?
答案 0 :(得分:-1)
您不能有一个扩展两个类的类。但是,您可以通过使用特质来实现所需的目标。根据指南here的定义,特征是:
”单一继承语言中的代码重用机制 例如PHP。性状旨在减少单身的某些限制 通过使开发人员能够在内部自由重用方法集来继承 几个生活在不同阶级等级中的独立阶级。”
实际上,您需要做的是创建一个包含所需功能和所需行为的特征。示例:
[ { _id: 5c4f09b9fcb8c325cc5cdf5a,
product:
{ _id: 5c4f08168af248297c60c807,
category: 5c3f360b70ea8f0f8c6bc558,
productname: '8',
image: 'oneimg-1548683286064.jpg',
__v: 0 },
code: '888',
thkns: '888',
dimension: '888',
volume: '888',
lining: '888',
weight: '888',
text: '888',
imgdet:
'[object Object],[object Object],[object Object],[object Object]',
__v: 0 } ]
然后在每个类中,应这样添加语句trait handleExceptionMyWay {
public function handleException($exception) {
//Put here the desired functionality. Example:
return "Hello";
}
}
use handleExceptionMyWay;
这样,将使用特征中定义的函数,而不是base \ ErrorHandler中的原始函数