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

Yev*_*yev 47 php traits laravel php-7

我想使用现有的功能traittrait在其上创建我自己的功能,只是稍后将其应用于类.

确切地说,我想扩展Laravel SoftDeletestrait来制作SaveWithHistory函数,因此它会创建一个记录当前状态的副本作为已删除的记录.我也想用record_made_by_user_id字段来扩展它.

Fil*_*ski 106

就在这里.你只需要定义这样的新特征:

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

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

        //your implementation
    }
}
Run Code Online (Sandbox Code Playgroud)


Jso*_*owa 6

我有不同的方法。ParentSaveWithHistory在这个特性中仍然是适用的方法,所以至少应该定义为私有的。

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

    public function saveWithHistory()
    {
        $this->parentSaveWithHistory();
    }
}
Run Code Online (Sandbox Code Playgroud)

还要考虑特征中的“覆盖”方法:

use SoftDeletes, MySoftDeletes {
    MySoftDeletes::saveWithHistory insteadof SoftDeletes;
}
Run Code Online (Sandbox Code Playgroud)

此代码使用saveWithHistoryfrom方法MySoftDeletes,即使它存在于SoftDeletes.