Is there a way to extend a trait in PHP?

前端 未结 2 1272
轻奢々
轻奢々 2021-02-01 12:18

I want to use functionality of an existing trait and create my own trait on top of it only to later apply it on classes.

I want to extend

相关标签:
2条回答
  • 2021-02-01 12:27

    I have different approach. ParentSaveWithHistory is still applicable method in this trait so at least should be defined as private.

    trait MySoftDeletes
    {
        use SoftDeletes {
            saveWithHistory as private parentSaveWithHistory; 
        }
    
        public function saveWithHistory()
        {
            $this->parentSaveWithHistory();
        }
    }
    

    Consider also 'overriding' methods in traits:

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

    This code uses method saveWithHistory from MySoftDeletes, even if it exists in SoftDeletes.

    0 讨论(0)
  • 2021-02-01 12:31

    Yes, there is. You just have to define new trait like this:

    trait MySoftDeletes 
    {
        use SoftDeletes {
            SoftDeletes::saveWithHistory as parentSaveWithHistory;
        }
    
        public function saveWithHistory() {
            $this->parentSaveWithHistory();
    
            //your implementation
        }
    }
    
    0 讨论(0)
提交回复
热议问题