如何扩展已经由其他类扩展的基类?

时间:2019-01-29 07:55:49

标签: php oop yii2

因此,在我的应用程序中有一个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并在那里进行新类(仅一个类)的更改,并使它在扩展基类的两个类中可用,该怎么办?

1 个答案:

答案 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中的原始函数