Maison >développement back-end >tutoriel php >Pourquoi est-ce que j'obtiens une erreur « La propriété typée ne doit pas être accessible avant l'initialisation » en PHP ?

Pourquoi est-ce que j'obtiens une erreur « La propriété typée ne doit pas être accessible avant l'initialisation » en PHP ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-16 20:48:03860parcourir

Why Do I Get a

Comprendre l'erreur "La propriété typée ne doit pas être accessible avant l'initialisation" dans les propriétés avec des indications de type

PHP 7.4 a introduit l'indication de type pour les propriétés, nécessitant une initialisation appropriée de toutes les propriétés. Lorsqu'une propriété n'a pas de valeur assignée, elle reste dans un état indéfini qui pourrait entrer en conflit avec son type déclaré.

Par exemple, si l'on déclare :

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

Accéder à $val sans initialisation préalable entraînerait l'erreur : "La propriété typée Foo::$val ne doit pas être accessible avant l'initialisation." En effet, $val n'est ni une chaîne ni null lors de l'accès.

Pour résoudre ce problème, attribuez des valeurs valides à toutes les propriétés, soit comme valeurs par défaut, soit pendant la construction. Pour l'exemple ci-dessus, nous pourrions utiliser :

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

Ce faisant, toutes les propriétés ont des valeurs valides et l'instance est dans un état valide.

Cette erreur peut généralement se produire lorsque l'on s'appuie sur valeurs générées par la base de données telles que les identifiants ou les horodatages. Pour les identifiants générés automatiquement, il est conseillé de modifier la déclaration de type en private ?int $id = null. Pour les autres valeurs, choisissez les valeurs par défaut appropriées qui correspondent au type de propriété.

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