Dans le contexte de la programmation orientée objet, l'utilisation de la fonction eval est généralement déconseillée en raison des risques et inconvénients potentiels en matière de sécurité. Considérez la classe suivante :
class Song: attsToStore = ('Name', 'Artist', 'Album', 'Genre', 'Location') def __init__(self): for att in self.attsToStore: exec 'self.%s=None'%(att.lower()) in locals() def setDetail(self, key, val): if key in self.attsToStore: exec 'self.%s=val'%(key.lower()) in locals()
Bien que ce code puisse sembler pratique pour définir et récupérer des attributs de manière dynamique, il introduit les risques suivants :
Pour résoudre le problème de l'affectation d'attributs dynamiques sans ces risques, vous pouvez utiliser la fonction setattr à la place :
class Song: attsToStore = ('Name', 'Artist', 'Album', 'Genre', 'Location') def __init__(self): for att in self.attsToStore: setattr(self, att.lower(), None) def setDetail(self, key, val): if key in self.attsToStore: setattr(self, key.lower(), val)
En utilisant setattr, vous pouvez modifier dynamiquement les attributs de l'objet Song sans les problèmes potentiels de sécurité et de débogage associés à eval.
Bien qu'il existe de rares cas où l'utilisation d'eval ou exec peut être nécessaire, il est crucial d'adopter de telles pratiques en toute conscience pour prévenir les vulnérabilités et maintenir la qualité 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!