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.
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.
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.
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!