有没有办法在PHP中扩展一个特征?

2022-08-30 07:55:01

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

我想扩展特征以使其功能,因此它将创建记录的副本作为已删除的记录。我还想用字段扩展它。Laravel SoftDeletesSaveWithHistoryrecord_made_by_user_id


答案 1

是的,有。你只需要像这样定义新的特征:

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

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

        //your implementation
    }
}

答案 2

我有不同的方法。 在此特征中仍然适用方法,因此至少应将其定义为私有。ParentSaveWithHistory

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

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

还要考虑在特征中“重写”方法:

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

此代码使用 from 的方法,即使它存在于 中。saveWithHistoryMySoftDeletesSoftDeletes


推荐