Heim >Backend-Entwicklung >PHP-Tutorial >PHP ews: Konstruktor-Eigenschaftsförderung

PHP ews: Konstruktor-Eigenschaftsförderung

Susan Sarandon
Susan SarandonOriginal
2024-12-14 06:41:11814Durchsuche

PHP ews: Constructor Property Promotion

Constructor Property Promotion ist eine in PHP 8 eingeführte Funktion, die die Eigenschaftsdeklaration und -initialisierung innerhalb einer Klasse vereinfacht. Vor PHP 8 mussten Sie Klasseneigenschaften explizit deklarieren und sie dann im Konstruktor initialisieren. Mit dieser Funktion können Sie Eigenschaften direkt in der Parameterliste des Konstruktors deklarieren und initialisieren und so den Boilerplate-Code reduzieren.

Traditionelle Syntax (vor PHP 8)

class Product {
    private string $name;
    private float $price;

    public function __construct(string $name, float $price) {
        $this->name = $name;
        $this->price = $price;
    }
}

Constructor Property Promotion Syntax (PHP 8)

class Product {
    public function __construct(
        private string $name,
        private float $price
    ) {}
}

Vorteile

  1. Reduziert den Boilerplate-Code:

    • Dadurch entfällt die Notwendigkeit, Eigenschaften außerhalb des Konstruktors zu deklarieren und manuell zu initialisieren.
  2. Verbessert die Lesbarkeit:

    • Macht den Code präziser und verständlicher, insbesondere in Klassen mit vielen Eigenschaften.
  3. Unterstützt Unveränderlichkeit:

    • Eigenschaften können als schreibgeschützt markiert werden (eingeführt in PHP 8.1), um Änderungen nach der Initialisierung zu verhindern.

Notizen

  1. Sichtbarkeitsmodifikatoren:

    • Heraufgestufte Eigenschaften müssen einen Sichtbarkeitsmodifikator enthalten (privat, geschützt oder öffentlich).
  2. Standardwerte:

    • Sie können Standardwerte nicht direkt für heraufgestufte Eigenschaften festlegen, aber Sie können Standardargumentwerte im Konstruktor verwenden.
    class Product {
       public function __construct(
           private string $name = 'Unnamed',
           private float $price = 0.0
       ) {}
    }
    
  3. Mischung beworbener und nicht beworbener Immobilien:

    • Sie können traditionelle Eigenschaften und beworbene Eigenschaften in derselben Klasse kombinieren.
    class Product {
       private string $category;
    
       public function __construct(
           private string $name,
           private float $price
       ) {
           $this->category = 'General';
       }
    }
    

Anwendungsfälle

Constructor Property Promotion ist besonders nützlich für einfache Klassen wie DTOs (Data Transfer Objects), bei denen der Hauptzweck das Speichern von Daten ist.

class CustomerDTO {
    public function __construct(
        public string $name,
        public string $email,
        public ?string $phone = null
    ) {}
}

Fazit

Constructor Property Promotion ist eine leistungsstarke Funktion in PHP 8, die die Produktivität steigert und die Codekomplexität reduziert. Es ist ideal für Klassen mit mehreren Eigenschaften, bei denen eine prägnante und klare Initialisierung gewünscht ist.

Attributintegration

In PHP 8 können Attribute (auch als Anmerkungen bekannt) nahtlos mit Constructor Property Promotion kombiniert werden, was zu saubererem und aussagekräftigerem Code führt, insbesondere in Szenarien, in denen Metadaten mit Eigenschaften verknüpft werden müssen.

Integration mit Constructor Property Promotion

Mit der Constructor Property Promotion werden Eigenschaften direkt im Konstruktor definiert. Sie können Attribute verwenden, um diese Eigenschaften zu dekorieren und Kontextinformationen hinzuzufügen, ohne die Eigenschaften separat deklarieren zu müssen.

Praxisbeispiel

Angenommen, Sie arbeiten an einem DTO (Data Transfer Object) und möchten Eigenschaften Datenbankspalten zuordnen

Ohne Bauunternehmer-Promotion

class Product {
    private string $name;
    private float $price;

    public function __construct(string $name, float $price) {
        $this->name = $name;
        $this->price = $price;
    }
}

Mit Constructor Property Promotion

class Product {
    public function __construct(
        private string $name,
        private float $price
    ) {}
}

Vorteile der Integration

  1. Reduzierter Boilerplate-Code:

    • Hochgestufte Eigenschaften eliminieren doppelte Deklarationen und Attribute können direkt auf die Eigenschaften des Konstruktors angewendet werden.
  2. Saubererer, besser lesbarer Code:

    • Die Integration vereint Initialisierung, Metadaten und Sichtbarkeit an einem Ort.
  3. Flexibilität mit Reflexion:

    • Sie können die Reflection-API von PHP verwenden, um auf Attribute zuzugreifen und diese zu verarbeiten, die auf hochgestufte Eigenschaften angewendet werden.

Zugriff auf Attribute mit Reflexion

class Product {
   public function __construct(
       private string $name = 'Unnamed',
       private float $price = 0.0
   ) {}
}

Erläuterung des Kodex

  1. Spaltenattribut definieren:

    • Der Dekorator #[Attribute] gibt an, dass die Column-Klasse ein Attribut ist.
    • Die Attributklasse akzeptiert einen einzelnen Parameternamen, der verwendet wird, um eine Eigenschaft einer Datenbankspalte zuzuordnen.
  2. Attribute zu den Konstruktorparametern hinzufügen:

    • Attribute wie #[Column('user_id')] und #[Column('username')] werden den Konstruktorparametern id und name hinzugefügt.
  3. Reflexion verwenden:

    • Das ReflectionClass-Objekt wird für die User-Klasse erstellt, sodass wir ihre Eigenschaften und Methoden überprüfen können.
  4. Auf den Konstruktor zugreifen:

    • getConstructor() ruft den Konstruktor der User-Klasse ab.
  5. Iterieren über Parameter:

    • getParameters() ruft alle Parameter des Konstruktors ab.
  6. Attribute abrufen:

    • getAttributes(Column::class) ruft alle Attribute vom Typ Column ab, die auf einen Parameter angewendet werden.
  7. Instanziierung des Attributs:

    • newInstance() erstellt eine Instanz des Column-Attributs und gewährt Zugriff auf dessen Namenseigenschaft.
  8. Metadaten drucken:

    • Gibt den Parameternamen (z. B. id) und den zugehörigen Spaltennamen (z. B. user_id) an die Konsole aus.

Ausgabe:

class Product {
   private string $category;

   public function __construct(
       private string $name,
       private float $price
   ) {
       $this->category = 'General';
   }
}

Häufige Anwendungsfälle

  1. Datenbankzuordnung:

    • Verwendung von Attributen wie #[Spalte] zur Angabe von Datenbankspalten.
  2. Datenvalidierung:

    • Anwenden von Validierungen direkt auf Eigenschaften wie #[NotNull] oder #[MaxLength(255)].
  3. Serialisierung/Deserialisierung:

    • Zuordnung von Eigenschaften zu JSON-Feldern, z. B. #[JsonField('user_name')].

Fazit

Die Integration von Constructor Property Promotion mit Attributes bietet eine leistungsstarke und prägnante Möglichkeit, Klassen in PHP zu strukturieren. Dies ist besonders nützlich in Systemen, die auf Metadaten wie ORM, Validierung oder Serialisierung basieren, wodurch der Code ausdrucksvoller und organisierter wird.

Das obige ist der detaillierte Inhalt vonPHP ews: Konstruktor-Eigenschaftsförderung. 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