php - 使用魔法方法有什么缺点?如何在 child 类(class)中缩写它们?

标签 php doctrine magic-methods

我广泛使用魔术方法来实现很多目的,例如常见的 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/

相关文章:

php - 使用 PHP 显示 SQL 结果

symfony - 检查实体是否已经持久化到 Symfony2 中的 EntityManager

python - 如何编写静态 python getitem 方法?

python - `self[key] += value` 的魔术方法?

php - 如何记录 IDE 的魔法(_call 和 _callStatic)方法

PHP 爆炸函数给我一个在 mysql 查询中不可读的字符串

javascript - html 我需要用图形代替 vcr 控件的文本来控制数据库中的状态

sql - 如何在id上查询多对多表匹配/连接

Symfony - ManyToOne 关系中的循环引用错误

php - 提取内部 EXE 信息