PHP多个继承与接口

我正在尝试了解如何使用界面给我多个继承,因为我已经在谷歌搜索.

class A
{
 function do1(){}
 function do2(){}
 function do3(){}
}

class B extends A
{
 function do4(){}
 function do5(){}
 function do6(){}
}

class C extends B
{
}

在上面的例子中,C类具有来自A类和B类的所有方法.但是,B类也具有A类的所有方法,这不是必需的.

我的搜索已经提出使用接口来解决这个问题,通过将方法移动到类和创建接口,如下所示.

interface A
{
     function do1();
     function do2();
     function do3();
}

interface B
{
     function do4();
     function do5();
     function do6();
}

class C implements A, B
{
     function do1(){}
     function do2(){}
     function do3(){}
     function do4(){}
     function do5(){}
     function do6(){}
}

我真的不明白这是如何解决问题的,因为所有的代码都在新的类中.如果我最初只想使用A类,我将不得不创建一个实现接口A并将相同代码复制到新类的新类.

有没有我失踪的东西?

最佳答案
PHP没有多重继承.如果你有PHP 5.4,你可以使用traits至少避免每个类都必须复制代码.

interface A {
    public function do1();
    public function do2();
    public function do3();
}

trait Alike {
    public function do1() { }
    public function do2() { }
    public function do3() { }
}


interface B {
    public function do4();
    public function do5();
    public function do6();
}

trait Blike {
    public function do4() { }
    public function do5() { }
    public function do6() { }
}


class C implements A, B {
    use Alike, Blike;
}

class D implements A {
    use Alike;

    // You can even "override" methods defined in a trait
    public function do2() { }
}

但是请注意,您必须同时实现该接口并使用trait(或者,当然也可以提供自己的实现).除了在实现A接口之外,C和D根本不相关. traits基本上只是解释器级复制和粘贴,不影响继承.

转载注明原文:PHP多个继承与接口 - 代码日志