Maison  >  Article  >  développement back-end  >  __get et __set ne font-ils vraiment que surcharger les getters et les setters en PHP ?

__get et __set ne font-ils vraiment que surcharger les getters et les setters en PHP ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-12 14:34:02698parcourir

Are __get and __set Really Just Overloading Getters and Setters in PHP?

Méthodes magiques : dévoiler le véritable objectif de __get et __set en PHP

Les énigmatiques méthodes magiques __get et __set en PHP ont intrigué les développeurs, les laissant s'interroger sur leur fonctionnalité prévue. Jusqu'à récemment, on pensait que ces méthodes permettaient de surcharger sans effort les getters et les setters. Cependant, la réalité dresse un tableau différent.

Comprendre le véritable rôle des méthodes magiques

Contrairement à l'hypothèse populaire, __get et __set sont principalement conçus pour gérer des situations où la méthode directe ou l'accès à la propriété est restreint en raison de limitations d'accessibilité. Plus précisément :

  • __set est invoqué lors d'une tentative d'écriture dans une propriété inaccessible.
  • __get est utilisé lors de la lecture de données à partir d'une propriété inaccessible.

Exemple

Considérez le code suivant extrait :

class foo {
    public $bar;
    public function __get($name) {
        echo "Get:$name";
        return $this->$name;
    }

    public function __set($name, $value) {
        echo "Set:$name to $value";
        $this->$name = $value;
    }
}

$foo = new foo();
echo $foo->bar; // Fails
$foo->bar = 'test'; // Fails

Dans ce cas, les méthodes __get et __set ne sont pas invoquées car la propriété $bar est accessible publiquement. Le manuel PHP indique explicitement : "Les méthodes magiques ne remplacent pas les getters et les setters. Elles vous permettent simplement de gérer les appels de méthode ou l'accès aux propriétés qui autrement entraîneraient une erreur."

Implications sur les performances

Il est important de noter que les méthodes magiques ont un coût en termes de performances. Leur invocation est sensiblement plus lente que l'utilisation de getters, de setters ou d'appels de méthode directs appropriés. Par conséquent, ils doivent être réservés à des circonstances exceptionnelles où la gestion des problèmes d'inaccessibilité est nécessaire.

Conclusion

Bien que __get et __set puissent sembler une solution pratique pour la surcharge des getters et des setters , leur véritable objectif réside dans la gestion des limitations d’accès à la propriété. Comprendre leur rôle précis est crucial pour un développement efficace du code PHP. En adoptant ces connaissances, vous pouvez éviter des pénalités de performances inutiles et garantir la stabilité du code.

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