了解PHP中的特质与组合

凯文·希尔

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

博客ircmaxell认为它们可能是“新的评价”,而我发现其他类似这样的网站,对它们的评价也不错。在我将其实施到我的项目之前,我想确保我了解它们如何正常工作。

例如:我有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() {}
}
叶夫根尼·库兹敏(Evgeniy Kuzmin)

是的,你是对的。当您需要某种PHP不支持的多重继承时,可以从特征中获得主要好处。因此,您可以组织一些应该在不同类中重用的,没有继承关系的代码。

例如:您可以拥有一个与Partent不相关的“其他”类,但是您仍然需要函数“ commonMethod1”,因此可以使用相同的特征

class Other {
use commonMethod1; 
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章