使用traits取代多重继承的角色没有PHP?

使用traits取代多重继承的角色没有PHP?,php,traits,Php,Traits,如果我使用一个具有两种不同特征的类,并且两个类都有一个名称相同但实现不同的方法,会发生什么情况?简短回答 (c)尸体 长话短说 假设您有一个使用traitsa和B的类Foo: class Foo { use A, B; } 两个trait都有一个名称相似但实现不同的方法(其实实现并不重要): 特性通过水平扩展类来工作。简单地说,就是向类中添加任何新内容。在特质方法和属性加倍之前,一切都很好。如果未明确解决此冲突,则会出现致命错误 最妙的是,您可以通过指定使用哪个trait的哪个方法来解

如果我使用一个具有两种不同特征的类,并且两个类都有一个名称相同但实现不同的方法,会发生什么情况?

简短回答 (c)尸体

长话短说 假设您有一个使用traitsaB的类Foo

class Foo {
    use A, B;
}
两个trait都有一个名称相似但实现不同的方法(其实实现并不重要):

特性通过水平扩展类来工作。简单地说,就是向类中添加任何新内容。在特质方法和属性加倍之前,一切都很好。如果未明确解决此冲突,则会出现致命错误

最妙的是,您可以通过指定使用哪个trait的哪个方法来解决此冲突:

class Foo {
    use A, B {
        B::bar insteadof A;
    }
}
您还可以使用别名将另一个方法从遗忘中保存:

class Foo {
    use A, B {
        B::bar insteadof A;
        A::bar as barOfA;
    }
}
这些特征都有很好的记录,去看看吧。

简短回答 (c)尸体

长话短说 假设您有一个使用traitsaB的类Foo

class Foo {
    use A, B;
}
两个trait都有一个名称相似但实现不同的方法(其实实现并不重要):

特性通过水平扩展类来工作。简单地说,就是向类中添加任何新内容。在特质方法和属性加倍之前,一切都很好。如果未明确解决此冲突,则会出现致命错误

最妙的是,您可以通过指定使用哪个trait的哪个方法来解决此冲突:

class Foo {
    use A, B {
        B::bar insteadof A;
    }
}
您还可以使用别名将另一个方法从遗忘中保存:

class Foo {
    use A, B {
        B::bar insteadof A;
        A::bar as barOfA;
    }
}

这个特征已经被很好地记录下来了,去看看吧。

试着想象一下你所知道的所有生命瞬间停止,你身体中的每个分子都以光速爆炸。@Abracadver这里有一个例子that@Machavity:我说的是,完全的质子反转…可能是你想象的所有生命瞬间停止,你身体中的每个分子都以光速爆炸的复制品。@Abracadver这里有一个例子that@Machavity:我说的是,完全的质子反转…可能是