2

我广泛使用魔术方法来实现很多目的,例如常见的 setter 和 getter,使用 __call() 实现的包装类。现在已经研究了学说,我想知道他们没有使用魔法 getter 和 setter 实际上如果我们在模型中指定它们就不起作用。

所以我的问题是教义如何简化魔术方法?以及在 ORM 中专门使用魔法方法(如 docterine)有什么缺点?

4

1 回答 1

3
  • 魔术代码很难记录和理解。通常您应该为每个函数添加注释并使用工具生成
    文档。这不适用于魔术方法。

  • 魔术方法不支持类型提示。使用函数设置属性的最大优点之一是您可以使用类型提示。像这样的代码

    公共函数 setUser(User $user){ this->user = $user }

    确保用户属性将始终包含有效的用户对象或 null。

  • IDE 不支持魔术方法。许多现代 PHP IDE 支持自动完成。函数和方法由一个简单的解析器识别。此解析器无法检测到魔法设置或调用操作。

我听说魔术方法比显式方法慢,但我自己从未测试过。

那么没有魔法你怎么做呢?我使用模板来生成 geter 和 setter,通常我根本不使用 __call。

魔术方法是用于创建代理对象和其他专用工具的非常有用的工具,但您不应该在每个类中都使用它们

于 2012-07-27T12:10:09.147 回答