Heim >Backend-Entwicklung >PHP-Tutorial >Warum erhalte ich in PHP den Fehler „Auf die typisierte Eigenschaft darf vor der Initialisierung nicht zugegriffen werden'?

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

Barbara Streisand
Barbara StreisandOriginal
2024-11-17 04:32:03998Durchsuche

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

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
}

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();
    }
}

Nullable Types:

Deklarieren Sie optionale Eigenschaften als nullable:

private ?int $id;

DB Generated Values (Automatisch generierte IDs):

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

private ?int $id = null;

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!

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