Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Attribute: So verwenden Sie PHP-Attribute und erstellen benutzerdefinierte Attributklassen – schnelle Tipps

PHP-Attribute: So verwenden Sie PHP-Attribute und erstellen benutzerdefinierte Attributklassen – schnelle Tipps

WBOY
WBOYOriginal
2024-08-23 16:30:32746Durchsuche

PHP-Attribute wurden in PHP 8.0 eingeführt. Diese Version stellte einen bedeutenden Meilenstein für die Sprache dar und brachte mehrere neue Funktionen und Verbesserungen mit sich, darunter die Einführung von Attributen zum Hinzufügen von Metadaten zu Codedeklarationen.

Das erste Mal, dass ich mich mit Attributen befassen musste, war ein Problem in der PHP-Bibliothek des Inspektors. Schauen Sie auf GitHub nach. Bevor wir tiefer in die Lösung einsteigen, werfen wir einen Überblick darüber, was Attribute sind und wie sie in Ihrem PHP-Code verwendet werden können.

Attribute sind eine leistungsstarke Funktion, mit der Sie Metadaten zu Deklarationen wie Klassen, Methoden oder Eigenschaften hinzufügen können. Diese Metadaten können programmgesteuert abgerufen werden, was neue Möglichkeiten für saubereren, besser organisierten und effizienteren Code eröffnet.

Denken Sie daran, dass Attribute zur Laufzeit keine Auswirkung haben. Sie sind in den Reflection-APIs verfügbar, um Ihre Anwendung auf der Grundlage von Attributen, die einer Klasse, Methode oder einer Eigenschaft zugeordnet sind, auf Dinge aufmerksam zu machen, die Sie ausführen möchten.

Integrierte Attribute

PHP verfügt über mehrere integrierte Attribute, die unterschiedlichen Zwecken dienen. Hier sind einige bemerkenswerte:

@veraltet

Markiert eine Funktion oder Methode als veraltet und signalisiert damit, dass sie vermieden werden sollte, da sie in zukünftigen Versionen möglicherweise entfernt wird.

#[Deprecated("Use newFunction() instead")]
function oldFunction() 
{
    // Function implementation
}

@override

Stellt sicher, dass die Methode in einer untergeordneten Klasse eine Methode in der übergeordneten Klasse überschreiben soll.

class Child extends Parent {
    #[Override]
    public function defaultMethod() 
    {
        // Method implementation
    }
}

Wenn defaultMethod() irgendwann seinen Namen in der übergeordneten Klasse ändert, ist dies keine Überschreibung mehr. In diesem Fall gibt PHP eine Warnung aus, da wir ausdrücklich erklärt haben, dass wir mit einer Überschreibung rechnen und uns über die Fehlausrichtung informieren.

Wie auch immer, eine gute IDE sollte es uns ermöglichen, solche Fehler nicht zu begehen.

@SuppressWarnings

Unterdrückt spezifische Warnungen für einen bestimmten Codeabschnitt.

#[SuppressWarnings("SomeWarning")]
function someFunction() 
{
    // Function implementation
}

Erstellen benutzerdefinierter Attributklassen

Jetzt erstellen wir eine benutzerdefinierte Attributklasse. Dies ist von Vorteil, wenn Sie bestimmtes Verhalten innerhalb eines Attributs kapseln möchten.

#[Attribute]
class CustomAttribute 
{
    public string $message;

    public function __construct(string $message) 
    {
        $this->message = $message;
    }
}

Sie können dieses benutzerdefinierte Attribut dann für verschiedene Elemente verwenden:

class MyClass 
{
    #[CustomAttribute("This is a custom attribute")]
    public $myProperty;

    #[CustomAttribute("Another custom attribute")]
    public function myMethod() 
    {
        // Method implementation
    }
}

Anwendungsbeispiele

Lassen Sie uns ein praktisches Beispiel untersuchen. Angenommen, Sie erstellen eine Webanwendung und möchten ein benutzerdefiniertes Attribut erstellen, um die Länge einer Zeichenfolge zu definieren:

#[Attribute(Attribute::TARGET_PROPERTY)]
class MaxLength 
{
    public int $maxLength;

    public function __construct(int $maxLength) 
    {
        $this->maxLength = $maxLength;
    }
}

Im obigen Beispiel haben wir die Möglichkeit, das Attribut nur auf Klasseneigenschaften anzuwenden, eingeschränkt. Jetzt können wir es in der User-Klasse verwenden:

class User 
{
    #[MaxLength(20, message: "Username must be 20 characters or less")]
    public string $username;

    // Other properties and methods
}

Wie bereits erwähnt, hat das Hinzufügen des Attributs zur Eigenschaft keine Auswirkungen auf die Ausführung. Aber wir können diese Informationen jetzt durch Reflexion abrufen, um schließlich Maßnahmen zu ergreifen.

Übernahme durch PHP-Frameworks

Die am häufigsten verwendeten PHP-Frameworks wie Symfony und Laravel übernehmen bereits Attribute, um „Annotationen“ grundsätzlich zu ersetzen. In Symfony 5.2 oder höher können Sie einen Controller deklarieren und ihn mithilfe von Attributen mit einer Route verbinden:

public class Arrayable implements \ArrayAccess
{
    …

    public function offsetExists($offset)
    {
        return isset($this->data[$offset]);
    }

    …
}

Seit PHP 8 hat sich die Definition der ArrayAccess-Schnittstelle geändert in:

PHP Attributes: how to use PHP Attributes and create custom attribute classes – Fast Tips

Durch die Verwendung von Attributen erzwangen sie die Deklaration des Datentyps für die Argumente in Offset-Funktionen. Wenn die Implementierung mithilfe des LanguageLevelTypeAware-Attributs den Datentyp für Argumente nicht bereitstellt, wird eine „Veraltungswarnung“ ausgelöst.

Aber die Deklaration des Datentyps in Funktionsargumenten beeinträchtigt die Kompatibilität mit älteren Versionen von PHP, die die Datentypdeklaration von Argumenten nicht unterstützen.

Da es sich nur um eine Warnung für zukünftige Änderungen handelte, haben wir das Problem mit einem anderen integrierten PHP-Attribut gelöst, um die Warnung zu unterdrücken:

public class Arrayable implements \ArrayAccess
{
    …

    #[\ReturnTypeWillChange]
    public function offsetExists($offset)
    {
        return isset($this->data[$offset]);
    }

    …
}

Das ReturnTypeWillChange-Attribut teilt PHP einfach mit, dass wir über die zukünftigen Änderungen in der Sprache Bescheid wissen und die notwendigen Aktualisierungen bereits geplant haben.

Insbesondere für diese Änderung werden sie definitiv in PHP 9 implementiert.

Denken Sie daran, Attribute mit Bedacht zu verwenden und Ihre Codebasis sauber und gut dokumentiert zu halten. Dies ist besonders wichtig bei der SaaS-Produktentwicklung, wo Skalierbarkeit, Wartbarkeit und Effizienz im Vordergrund stehen.

Neu bei Inspector? Überwachen Sie Ihre Bewerbung kostenlos

Inspector ist ein Tool zur Codeausführungsüberwachung, das speziell für Softwareentwickler entwickelt wurde. Sie müssen nichts auf Serverebene installieren, installieren Sie einfach das Composer-Paket und schon kann es losgehen.

Im Gegensatz zu anderen komplexen All-in-One-Plattformen ist Inspector supereinfach und PHP-freundlich. Sie können unser Laravel- oder Symfony-Paket ausprobieren.

Wenn Sie auf der Suche nach effektiver Automatisierung, umfassenden Einblicken und der Möglichkeit sind, Warnungen und Benachrichtigungen an Ihre Messaging-Umgebung weiterzuleiten, testen Sie Inspector kostenlos. Registrieren Sie Ihr Konto.

Oder erfahren Sie mehr auf der Website: https://inspector.dev

PHP Attributes: how to use PHP Attributes and create custom attribute classes – Fast Tips

Das obige ist der detaillierte Inhalt vonPHP-Attribute: So verwenden Sie PHP-Attribute und erstellen benutzerdefinierte Attributklassen – schnelle Tipps. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:. ZahlenkomplementNächster Artikel:. Zahlenkomplement