Warum erhalte ich in PHP den Fehler „Auf die typisierte Eigenschaft darf vor der Initialisierung nicht zugegriffen werden'?

Barbara Streisand
Freigeben: 2024-11-17 04:32:03
Original
882 Leute haben es durchsucht

Why Am I Getting the

Fehler „Auf typisierte Eigenschaften darf vor der Initialisierung nicht zugegriffen werden“ nach dem Hinzufügen von Eigenschaftstyphinweisen

Bei der Einführung von Eigenschaftstyphinweisen in Ihre PHP-Klassen kann ein Fehler auftreten, der besagt , „Auf die typisierte Eigenschaft darf vor der Initialisierung nicht zugegriffen werden.“ Dieser Fehler tritt auf, wenn auf eine Eigenschaft zugegriffen wird, bevor sie mit einem gültigen Wert initialisiert wurde, der ihrem deklarierten Typ entspricht.

Ursache

Gemäß PHP 7.4s Typhinweis für Eigenschaften müssen alle Eigenschaften haben Werte, die ihren deklarierten Typen entsprechen. Eine nicht zugewiesene Eigenschaft befindet sich in einem undefinierten Zustand und stimmt mit keinem deklarierten Typ überein, auch nicht mit null.

Beispiel

Betrachten Sie den folgenden Code:

class Foo {

    private int $id;
    private ?string $val;
    private DateTimeInterface $createdAt;
    private ?DateTimeInterface $updatedAt;

    // Getters and setters omitted for brevity...
}

$f = new Foo(1);
$f->getVal(); // Error: Typed property Foo::$val must not be accessed before initialization
Nach dem Login kopieren

In diesem Beispiel Wenn Sie auf die Eigenschaft $val zugreifen, ohne ihr zunächst eine Zeichenfolge oder einen Nullwert zuzuweisen, wird eine ausgelöst Fehler.

Lösung

Standardwerte:

Sie können Eigenschaften während der Deklaration Standardwerte zuweisen:

class Foo {

    private ?string $val = null; // Default null value for optional property
}
Nach dem Login kopieren

Konstruktor-Initialisierung:

Eigenschaften in initialisieren Konstruktor:

class Foo {

    public function __construct(int $id) {
        // Assign values to all properties
        $this->id = $id;
        $this->createdAt = new DateTimeImmutable();
        $this->updatedAt = new DateTimeImmutable();
    }
}
Nach dem Login kopieren

Nullable Types:

Deklarieren Sie optionale Eigenschaften als nullable:

private ?int $id;
Nach dem Login kopieren

DB Generated Values (Automatisch generierte IDs):

Verwenden Sie nullfähige Typen für Eigenschaften, die von initialisiert werden die Datenbank:

private ?int $id = null;
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum erhalte ich in PHP den Fehler „Auf die typisierte Eigenschaft darf vor der Initialisierung nicht zugegriffen werden'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage