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