Php:如果你不能编辑基类,如何优雅地添加新方法?

时间:2015-11-20 09:04:10

标签: php

假设我有表单输入:

TextArea -> Input -> InputBase
Checkbox -> InputBase
RadioGroup -> InputBase
Password -> Input -> InputBase

他们是不可触碰的阶级。但这次我想添加一个新的功能。例如“echo CSS class attributes”和一个新字段(数字)。通常我会添加InputBase,但这次不是一个选项。 我通常可以这样做:

Numeric -> Input -> InputBase

在哪里添加我的自定义功能?我可以写:

Numeric -> MyCustomFunctionallityClass -?> InputBase
                                       -?> Input

但是MyCustomFunctionallityClass必须继承InputBase,因此它会失去Input性质。

1 个答案:

答案 0 :(得分:1)

您可以查找traits

  

Traits是一种在单继承语言(如PHP)中重用代码的机制。 Trait旨在通过使开发人员能够在生活在不同类层次结构中的多个独立类中自由地重用方法集来减少单继承的某些限制。 Traits和类组合的语义以降低复杂性的方式定义,并避免了与多重继承和Mixins相关的典型问题。

所以,你可以:

trait Hello {
    public function sayHello() { echo 'Hello ';}
}

trait World {
    public function sayWorld() { echo 'World'; }
}

class MyHelloWorld {
    use Hello, World;
    public function sayExclamationMark() {
        echo '!';
    }
}

$o = new MyHelloWorld();
$o->sayHello();
$o->sayWorld();
$o->sayExclamationMark();
// outputs 'Hello World!'