在物件導向程式設計的上下文中,由於潛在的安全風險和缺陷,通常不鼓勵使用 eval 函數。考慮以下類別:
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()
雖然此程式碼對於動態設定和檢索屬性似乎很方便,但它引入了以下風險:
要解決動態屬性分配問題而不存在這些風險,您可以改用setattr 函數:
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)
使用setattr ,您可以動態修改Song 物件的屬性,而不會出現與下列內容相關的潛在安全性和偵錯問題eval。
雖然在極少數情況下可能需要使用 eval 或 exec,但謹慎採用此類做法對於防止漏洞和維護程式碼品質至關重要。
以上是為什麼在物件導向程式設計中使用「eval()」是危險的?的詳細內容。更多資訊請關注PHP中文網其他相關文章!