Php 用特征扩展类

Php 用特征扩展类,php,class,traits,Php,Class,Traits,由于我刚刚从另一种语言跳到PHP,我想问一下,向类添加扩展的正确方法是什么。我现在的配置如下: class A extends B { use C; public function a(){ } } 我需要向类A添加一些额外的函数,但逻辑上将它们从类A中分离出来,所以我想我应该使用特征C 所以我的问题是-我能在我的特性C中使用函数a()吗?我知道我可以在trait C中定义抽象函数a(),但是我认为这根本不是一个好的实践。也许我能以某种方式将其注入

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

class A extends B {
    use C;         

    public function a(){

    }
}
我需要向类A添加一些额外的函数,但逻辑上将它们从类A中分离出来,所以我想我应该使用特征C


所以我的问题是-我能在我的特性C中使用函数a()吗?我知道我可以在trait 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不允许从多个类继承(单一继承)的特性而开发的。通过创建一个trait并将其应用于一个类,您就知道了如何继承它的方法

这实际上取决于你的需要

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

问:您想创建一个包含一些实现的抽象类,并允许其他类使用它们吗?答:创建一个抽象类

问:您是否希望一个类从另外两个类继承,并且它们具有不同的功能?A:创造一种特质


最好的方法是使用您可以使用的工具,以便输出您想要的结果并保持其组织性

如果您想要一个抽象的方法,听起来界面比特性更有益于您。