Maison >développement back-end >tutoriel php >Pourquoi PHP lance-t-il « La propriété typée ne doit pas être accessible avant l'initialisation » ?

Pourquoi PHP lance-t-il « La propriété typée ne doit pas être accessible avant l'initialisation » ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-17 07:05:03308parcourir

Why Does PHP Throw

Pourquoi l'erreur « La propriété typée ne doit pas être accessible avant l'initialisation » se produit avec les indices de type de propriété

PHP 7.4 a introduit l'indication de type pour les propriétés, soulignant la nécessité de fournir valeurs valides pour toutes les propriétés. Cependant, accéder aux propriétés sans les attribuer peut entraîner une erreur, car les propriétés non définies ne correspondent pas aux types déclarés.

Considérez le code suivant :

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

    public function __construct(int $id) {
        $this->id = $id;
    }
}

Essayer d'accéder à $val avant de l'attribuer entraînerait :

Fatal error: Typed property Foo::$val must not be accessed before initialization

Pour résoudre ce problème, attribuez des valeurs correspondant aux types déclarés soit comme valeurs par défaut, soit pendant la construction. Par exemple :

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

    public function __construct(int $id) {
        $this->id = $id;
        $this->createdAt = new DateTimeImmutable();
        $this->updatedAt = new DateTimeImmutable();
    }
}

Cela garantit que toutes les propriétés ont des valeurs valides, éliminant ainsi l'erreur.

Lorsque vous traitez des valeurs générées automatiquement comme les identifiants, déclarer la propriété comme privée ?int $id = null est recommandé. Pour les autres propriétés sans affectation spécifique, choisissez les valeurs par défaut appropriées en fonction de leurs types.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn