理解PHP中的特征与组合

时间:2015-05-01 19:38:35

标签: php traits

我正在尝试研究使用特征的主题,而我似乎无法得到明确的答案。

博主ircmaxell建议他们might be "the new eval",我找到了其他网站like this one,对他们说得好不好。在我的项目中实现它们之前,我想确保我理解它们是如何正常工作的。

例如: 我有10个不同的类,它们都扩展了一个Parent,每个类有20个方法。在一半的类之间可能存在5种方法的重叠,因此将这5种方法抽象为特征是否有意义?特征的关键是这些方法可以应用于需要它们的类,而不会通过将它们放在父级中来污染其他不需要它们的类,对吗?

// Why repeat myself?
class Parent {
    public method1() {}
    public method2() {}
    public method3() {}
}

class Foo extends Parent {
    public specificMethod1() {}    
    public specificMethod2() {}    
    public commonMethod1() {}
}

class Bar extends Parent {
    public specificMethod1() {}    
    public specificMethod2() {}
}

class Baz extends Parent {
    public specificMethod1() {}    
    public specificMethod2() {}    
    public commonMethod1() {}
}

// This way makes more sense
trait commonMethod1 {
    public commonMethod1() {}   
}

class Foo extends Parent {
    use commonMethod1;
    public specificMethod1() {}    
    public specificMethod2() {}
}

class Bar extends Parent {
    public specificMethod1() {}    
    public specificMethod2() {}
}

class Baz extends Parent {
    use commonMethod1;
    public specificMethod1() {}    
    public specificMethod2() {}
}

0 个答案:

没有答案
相关问题