扩展具有特征的课程

时间:2018-07-26 18:02:06

标签: php class traits

由于我刚从另一种语言跳到PHP,所以我想问你什么是向类添加扩展的正确方法。我现在的配置如下:

class A extends B {
    use C;         

    public function a(){

    }
}

我需要向A类添加一些其他功能,但从逻辑上将它们与之分开,因此尽管我将使用特征C。

所以我的问题是-我可以在特征C中使用函数a()吗?我知道我可以在特征C中定义抽象函数a(),但是我认为这根本不是一个好习惯。也许我可以以某种方式将其注入特质,还是不好的做法?

2 个答案:

答案 0 :(得分:3)

有可能,选择权是开发人员的决定权,最好的解决方案是基于经验。

trait C {
    public function hello() {
        parent::a();
        echo 'World!';
    }
}

class B {
    function a() {
        echo "hello";
    }
}

class A extends B{
    use C;  
}

(new A())->hello(); // helloWorld!

答案 1 :(得分:3)

让我们说:

Class B { 
    public function a () { 
    //Does something
    } 
}

Class A extends B { 
//We got access to B's public function. If you want to execute B's a and add some more content, then
    public function a() {
        parent::a();
        //Some more content
    }
}

由于PHP不允许从多个类继承(单继承),因此开发了特性。通过创建特征并将其应用于类,您就知道继承了它的方法

  

http://php.net/manual/en/language.oop5.traits.php

这真的取决于您的需求。

问:您是否要创建一个接口并使其他类实现某些方法? A:创建一个界面

问:是否要创建具有某些实现的抽象类,并允许其他类使用它们? A:创建一个抽象类

问:您是否要让一个类继承其他两个类,并且它们具有不同的功能?答:创建一个特征

最好的方法是使用您可以使用的工具,以便输出所需的结果并使其井井有条