我广泛使用魔术方法来实现很多目的,例如常见的 setter 和 getter,使用 __call() 实现了包装类。现在已经研究了 Doctrine ,我想知道他们没有使用魔法 getter 和 setter 实际上,如果我们在模型中指定它们就不起作用。
所以我的问题是 Doctrine 如何有缩写的魔法方法?在 ORM 中使用像 dotterine 这样的魔法方法有什么缺点?
最佳答案
魔法代码很难记录和理解。通常你应该添加 对每个函数进行注释并使用工具生成
文档。这不适用于魔法方法。魔术方法不支持类型提示。 使用函数设置属性的最大优点之一是可以使用类型提示。代码是这样的
公共(public)函数setUser(User $user){ this->user = $user }
确保用户属性始终包含有效的用户对象或 null。
IDE 不支持魔术方法。 许多现代 PHP IDE 支持自动完成。函数和方法由简单的解析器识别。此解析器无法检测魔法获取设置或调用操作。
我听说魔术方法比显式方法慢,但我自己从未测试过。
那么不用魔法你如何做到这一点呢? 我使用模板来生成 geter 和 setter,通常我根本不使用 __call。
魔术方法是创建代理对象和其他专用工具的非常有用的工具,但你不应该在每个类中使用它们
关于php - 使用魔法方法有什么缺点?如何在 child 类(class)中缩写它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11687339/