我一直在使用magento一段时间,并且总是无法决定使用魔法getter和getData()
有人可以解释主要区别,除了轻微的性能开销(并且它必须非常轻微).
我在想:
基于核心代码没有明确的方法,因为它使用了两者的混合
没有一个答案适合所有情况,最好根据您使用的模型和特定用例来决定.
魔术方法的性能非常差,以及在每个访问器上从CamelCase转换为under_score的额外开销.
魔术方法基本上都是getData()的包装器,但需要额外的开销.
但是,使用魔术方法有一个优点,例如:
如果你使用getAttributeName()而不是getData('attribute_name')
在未来的某个时刻,模型可能会更新为包含一个真实的,具体的getAttributeName()方法,在这种情况下,您的代码仍然可以正常工作.但是,如果您使用了getData(),则可以直接访问该属性,并绕过新方法,该方法可能包括您正在绕过的一些重要计算.
在我看来,最安全的方法是始终使用getData($key)
. 魔法吸气剂使用与您已经指出的相同的方法。优点是您可以在代码中找到对 getData 的所有引用,并在方法getData()
被重构时适当更改它。与此相比,必须找出所有魔术方法调用,它们的名称总是不同。第二件事是,当你有一个以相同方式命名的方法时,神奇的 getter 很容易搞砸你(我认为 getName() 曾经让我遇到过一次,并且花了相当长的时间来调试)。所以我的投票肯定是使用getData()
.