Dalam konteks pengaturcaraan berorientasikan objek, penggunaan fungsi eval secara amnya tidak digalakkan disebabkan oleh potensi risiko dan kelemahan keselamatan. Pertimbangkan kelas berikut:
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()
Walaupun kod ini kelihatan mudah untuk menetapkan dan mendapatkan semula atribut secara dinamik, ia memperkenalkan risiko berikut:
Untuk menangani isu penetapan atribut dinamik tanpa risiko ini , anda boleh menggunakan fungsi setattr sebaliknya:
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)
Menggunakan setattr, anda boleh mengubah suai atribut objek Lagu secara dinamik tanpa potensi isu keselamatan dan penyahpepijatan yang dikaitkan dengan eval.
Walaupun terdapat kes yang jarang berlaku di mana penggunaan eval atau eksekutif mungkin diperlukan, mengamalkan amalan sedemikian dengan berhati-hati adalah penting untuk mengelakkan kelemahan dan mengekalkan kualiti kod.
Atas ialah kandungan terperinci Mengapakah Menggunakan `eval()` dalam Pengaturcaraan Berorientasikan Objek Berbahaya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!