Maison  >  Article  >  développement back-end  >  Avis PHP : Solution pour essayer d'obtenir la propriété d'un non-objet

Avis PHP : Solution pour essayer d'obtenir la propriété d'un non-objet

WBOY
WBOYoriginal
2023-06-22 14:43:352864parcourir

Avis PHP : Solution pour essayer d'obtenir la propriété d'un non-objet

Dans le processus d'écriture de code en PHP, nous pouvons rencontrer le message d'erreur "Essayer d'obtenir la propriété d'un non-objet". Ce message d'erreur se produit généralement parce que nous essayons d'accéder à une propriété d'objet inexistante, provoquant une erreur dans le code.

Ce message d'erreur apparaît généralement dans les situations suivantes :

  1. L'objet n'existe pas

Ce message d'erreur apparaîtra lorsque nous tenterons d'accéder à une propriété d'objet qui n'existe pas. Par exemple :

$foo = null;
echo $foo->bar;

Dans cet exemple, $foo est une valeur nulle, ce n'est pas un objet, nous ne pouvons donc pas accéder à ses propriétés.

Solution :

Pour éviter cette erreur, nous devons nous assurer que l'objet doit déjà exister avant d'accéder à ses propriétés. Ceci peut être réalisé en utilisant la fonction isset(). Par exemple :

if(isset($foo)){
    echo $foo->bar;
}

De cette façon, si $foo n'existe pas, il ne tentera pas d'accéder à ses propriétés, évitant ainsi cette erreur.

  1. La propriété de l'objet n'existe pas

Ce message d'erreur apparaîtra également lorsque nous essayons d'accéder à une propriété d'un objet qui n'existe pas. Par exemple :

class foo {
    public $bar;
}

$foo = new foo();
echo $foo->baz;

Dans cet exemple, l'objet $foo existe, mais il n'a pas de propriété nommée "baz", nous ne pouvons donc pas y accéder.

Solution :

Pour éviter cette erreur, nous devons nous assurer qu'avant d'accéder à la propriété d'un objet, la propriété doit déjà exister. On peut ajouter un jugement au code pour vérifier si la propriété existe, par exemple :

class foo {
    public $bar;
}

$foo = new foo();
if(property_exists($foo, 'baz')) {
    echo $foo->baz;
}

De cette façon, si l'objet $foo n'a pas de propriété nommée "baz", il ne tentera pas d'y accéder, évitant ainsi cette erreur.

  1. Les propriétés de l'objet ne sont pas initialisées correctement

Une autre situation est que bien que les propriétés de l'objet existent, elles ne sont pas initialisées correctement. Cela peut entraîner une erreur « Essayer d'obtenir la propriété d'un non-objet » lors de la tentative d'accès à la propriété. Par exemple :

class foo {
    public $bar;

    public function __construct() {
        $this->bar = new bar();
    }
}

class bar {
    public $baz;
}

$foo = new foo();
echo $foo->bar->baz;

Dans cet exemple, l'objet $foo a une propriété appelée "bar", mais il n'est pas initialisé correctement dans le constructeur, nous ne pouvons donc pas accéder à sa propriété "baz".

Solution :

Pour éviter cette erreur, nous devons nous assurer que la propriété d'un objet a été correctement initialisée avant d'y accéder. Dans l'exemple ci-dessus, nous pouvons ajouter une fonction d'initialisation à l'objet $foo pour garantir que la propriété "bar" est correctement initialisée :

class foo {
    public $bar;

    public function __construct() {
        $this->init();
    }

    private function init(){
        $this->bar = new bar();
    }
}

class bar {
    public $baz;
}

$foo = new foo();
echo $foo->bar->baz;

De cette façon, lorsque nous essayons d'accéder à la propriété "bar" de l'objet $foo, il est déjà correctement initialisé et nous pouvons accéder avec succès à la propriété "baz", en évitant le message d'erreur "Essayer d'obtenir la propriété d'un non-objet".

Résumé :

Dans le processus d'écriture de code en PHP, nous devons faire attention pour éviter le message d'erreur "Essayer d'obtenir la propriété d'un non-objet". Nous devons nous assurer qu'avant d'accéder aux propriétés d'un objet, l'objet doit déjà exister et les propriétés doivent avoir été correctement initialisées pour éviter d'accéder à des propriétés non existantes. Vous pouvez utiliser les fonctions isset() et property_exists() pour déterminer si l'objet et les propriétés existent, et ajouter une fonction d'initialisation pour garantir que les propriétés de l'objet sont correctement initialisées.

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