Maison >développement back-end >tutoriel php >Pourquoi est-ce que j'obtiens une erreur fatale PHP : « Utiliser $this sans être dans le contexte d'un objet » ?

Pourquoi est-ce que j'obtiens une erreur fatale PHP : « Utiliser $this sans être dans le contexte d'un objet » ?

DDD
DDDoriginal
2024-12-15 02:56:17721parcourir

Why Am I Getting a PHP Fatal Error:

Utilisation de $this en dehors de la portée de l'objet : explication de l'erreur fatale PHP

L'erreur fatale PHP "Utilisation de $this lorsqu'il n'est pas dans le contexte de l'objet" se produit lorsque vous tentez d'accéder au mot-clé $this dans un contexte non-objet. Le mot-clé $this représente l'instance d'objet actuelle et ne peut être utilisé que dans le cadre d'une méthode ou d'une propriété d'un objet.

Considérez l'exemple de scénario fourni dans la question, où l'erreur se produit dans le fichier class.php. La ligne à l'origine de l'erreur est :

$this->foo = $foo;

Cette ligne attribue la valeur de la variable globale $foo à la propriété foo de l'objet actuel. Cependant, l'erreur est déclenchée car la méthode __construct(), où réside cette ligne, n'est pas exécutée dans un contexte d'objet.

Pour éviter cette erreur, il est important de s'assurer que $this est utilisé uniquement dans le contexte. d’une méthode ou d’une propriété objet. Dans l'exemple fourni, l'approche suivante résoudrait l'erreur :

class foobar {

    public $foo;

    public function __construct($foo) {
        $this->foo = $foo; // Now within object context
    }

    public function foobarfunc() {
        return $this->foo();
    }

    public function foo() {
        return $this->foo;
    }
}

Maintenant, la méthode __construct() prend un paramètre $foo qui devient la propriété foo de l'objet. De plus, la méthode foobarfunc() fait correctement référence à la propriété foo de l'objet en utilisant $this->foo.

Si l'intention est d'invoquer la méthode foobarfunc() sans créer d'objet, une méthode statique doit être utilisée à la place. , tel que :

class foobar {

    public static $foo; // Static variable

    public static function foobarfunc() {
        return self::$foo; // Reference static variable
    }
}

Dans ce cas, la méthode foobarfunc() peut être appelée directement en utilisant le nom de la classe, sans nécessiter d'objet exemple.

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