有没有办法在PHP中扩展特性?

有没有办法在PHP中扩展特性?,php,laravel,traits,php-7,Php,Laravel,Traits,Php 7,我想使用现有的trait的功能,并在其上创建我自己的trait,以后再将其应用于类 我想扩展Laravel SoftDeletestrait以实现SaveWithHistory功能,因此它将创建一个记录副本作为已删除记录。我还想用record\u made\u by\u user\u id字段扩展它。是的,有。你只需要定义如下的新特征: trait MySoftDeletes { use SoftDeletes { SoftDeletes::saveWithHistor

我想使用现有的
trait
的功能,并在其上创建我自己的
trait
,以后再将其应用于类


我想扩展
Laravel SoftDeletes
trait以实现
SaveWithHistory
功能,因此它将创建一个记录副本作为已删除记录。我还想用
record\u made\u by\u user\u id
字段扩展它。

是的,有。你只需要定义如下的新特征:

trait MySoftDeletes 
{
    use SoftDeletes {
        SoftDeletes::saveWithHistory as parentSaveWithHistory;
    }

    public function saveWithHistory() {
        $this->parentSaveWithHistory();

        //your implementation
    }
}

我有不同的方法
ParentSaveWithHistory
仍然适用于此特性,因此至少应定义为private

trait MySoftDeletes
{
    use SoftDeletes {
        saveWithHistory as private parentSaveWithHistory; 
    }

    public function saveWithHistory()
    {
        $this->parentSaveWithHistory();
    }
}
还要考虑traits中的“覆盖”方法:

use SoftDeletes, MySoftDeletes {
    MySoftDeletes::saveWithHistory insteadof SoftDeletes;
}

此代码使用的方法是
MySoftDeletes
中的
saveWithHistory
,即使它存在于
SoftDeletes

中,可能的重复项也是一个很好的答案。仅供参考,以下是进一步的信息:在此上下文中,您可能会发现以下资源很有用:显示了扩展特征的另一个示例。