使用特征扩展 class

Extending a class with a trait

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

class A extends B {
    use C;         

    public function a(){

    }
}

我需要向 class A 添加一些额外的功能,但逻辑上将它们与它分开,所以我虽然我会使用特征 C。

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

有可能,开发者自行选择,最好的方案是凭经验。

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!

假设:

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 不允许从多个 class 继承(单继承)的性质而开发的。通过创建特征并将其应用于 class,您知道继承它的方法

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

这真的取决于您的需求。

问:你想创建一个接口让其他classes实现某些方法吗? A:创建接口

问:你想用一些实现创建一个抽象 class 并允许其他 class 使用它们吗? A:创建摘要class

问:您是否希望 class 继承另外两个 class 并且它们具有不同的功能? A: 创建特征

最好的方法是使用您可以随意使用的工具来输出您想要的结果并使其井井有条