2
我試圖研究使用特徵的主題,而且我似乎無法得到明確的答案。瞭解PHP中的特徵與組成
博主ircmaxell建議他們might be "the new eval",我發現其他網站like this one,對他們說好的和壞的。我想確保在理解它們如何正確工作之前,在我的項目中實施它們之前。
例如: 我有10個不同的類,都擴展一個父,每個類有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() {}
}
在你的榜樣,不會告發」 t'specificMethod1'和'specificMethod2'在Parent中最好?他們對所有的孩子班都很普遍。 – halfer
是否在特定情況下使用特質是主觀的。在這種情況下,三級層次結構可能更合適:父級可以擴展一次以包含「commonMethod1」,然後再次擴展爲「Foo」和「Baz」。 (儘管抽象的例子很難理解,因爲沒有明顯的關係,比如車輛,汽車和兩廂車)。 – halfer
特徵是語言輔助複製粘貼。有很多情況下,他們是有用的。在你提到的情況下,他們做出*完美的感覺*。有些類需要這5種方法,有些則不需要,但它們都來自同一個「Parent」。一個特質允許你一次寫出5個方法,並將它們「注入」到需要它們的類中。 –