Heim  >  Artikel  >  Backend-Entwicklung  >  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“?

Susan Sarandon
Susan SarandonOriginal
2024-11-16 20:48:03779Durchsuche

Why Do I Get a

Verstehen des Fehlers „Auf typisierte Eigenschaften darf vor der Initialisierung nicht zugegriffen werden“ in Eigenschaften mit Typhinweisen

PHP 7.4 führte Typhinweise für Eigenschaften ein. Dies erfordert eine ordnungsgemäße Initialisierung aller Eigenschaften. Wenn einer Eigenschaft kein zugewiesener Wert zugewiesen wurde, verbleibt sie in einem undefinierten Zustand, der mit ihrem deklarierten Typ in Konflikt geraten könnte.

Zum Beispiel, wenn wir Folgendes deklarieren:

class Foo {
    private int $id;
    private ?string $val;
    private DateTimeInterface $createdAt;
    private ?DateTimeInterface $updatedAt;
}

Zugriff auf $val ohne vorherige Initialisierung würde zu folgendem Fehler führen: „Auf die typisierte Eigenschaft Foo::$val darf vor der Initialisierung nicht zugegriffen werden.“ Dies liegt daran, dass $val beim Zugriff weder eine Zeichenfolge noch null ist.

Um dieses Problem zu beheben, weisen Sie allen Eigenschaften gültige Werte zu, entweder als Standardwerte oder während der Erstellung. Für das obige Beispiel könnten wir Folgendes verwenden:

class Foo {
    private int $id;
    private ?string $val = null;
    private Collection $collection;
    private DateTimeInterface $createdAt;
    private ?DateTimeInterface $updatedAt;

    public function __construct(int $id) {
        // Setting default values for other properties
        $this->id = $id;
        $this->createdAt = new DateTimeImmutable();
        $this->updatedAt = new DateTimeImmutable();

        $this->collection = new ArrayCollection();
    }
}

Auf diese Weise haben alle Eigenschaften gültige Werte und die Instanz befindet sich in einem gültigen Zustand.

Dieser Fehler kann häufig auftreten, wenn man sich darauf verlässt Von der Datenbank generierte Werte wie IDs oder Zeitstempel. Für automatisch generierte IDs empfiehlt es sich, die Typdeklaration in private ?int $id = null zu ändern. Wählen Sie für andere Werte geeignete Standardwerte aus, die dem Typ der Eigenschaft entsprechen.

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