Gibt es eine Möglichkeit, ein Merkmal in PHP zu erweitern?

Lesezeit: 1 Minute

Benutzer-Avatar
Jewgenij Afanasjew

Ich möchte die Funktionalität einer vorhandenen verwenden trait und meine eigenen erstellen trait darauf, um es später im Unterricht anzuwenden.

Ich möchte verlängern Laravel SoftDeletes Eigenschaft zu machen SaveWithHistory Funktion, sodass eine Kopie eines Datensatzes als gelöschter Datensatz erstellt wird. Ich möchte es auch mit verlängern record_made_by_user_id aufstellen.

  • Mögliches Duplikat von Extend Traits with Classes in PHP?

    – Mihai Matei

    28. Oktober 2016 um 6:20 Uhr

  • stackoverflow.com/a/37687295/470749 ist eine gute Antwort.

    – Ryan

    13. November 2018 um 17:55 Uhr

Benutzer-Avatar
Filip Koblański

Ja da ist. Sie müssen nur ein neues Merkmal wie folgt definieren:

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

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

        //your implementation
    }
}

  • Nur als Referenz für Suchende finden Sie hier weitere Informationen: php.net/manual/en/language.namespaces.importing.php

    – Dieser Realty Programmer Guy

    20. August 2019 um 21:18 Uhr

  • In diesem Zusammenhang finden Sie möglicherweise die folgende Ressource hilfreich: stackoverflow.com/questions/39820753/…

    – JD

    16. Oktober 2019 um 10:57 Uhr

  • stackoverflow.com/a/37687295/470749 zeigt ein weiteres Beispiel für die Erweiterung von Traits.

    – Ryan

    18. Oktober 2019 um 21:41 Uhr

Ich habe einen anderen Ansatz. ParentSaveWithHistory ist immer noch anwendbare Methode in diesem Merkmal sollte also zumindest als privat definiert werden.

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

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

Ziehen Sie auch das „Überschreiben“ von Methoden in Merkmalen in Betracht:

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

Dieser Code verwendet Methode saveWithHistory aus MySoftDeletesauch wenn es in existiert SoftDeletes.

1353430cookie-checkGibt es eine Möglichkeit, ein Merkmal in PHP zu erweitern?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy