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
Libérer: 2024-11-16 20:48:03
original
774 Les gens l'ont consulté

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;
}
Copier après la connexion

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();
    }
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal