Magento,魔术getter v getData

Mar*_*ace 5 magento

我一直在使用magento一段时间,并且总是无法决定使用魔法getter和getData()

有人可以解释主要区别,除了轻微的性能开销(并且它必须非常轻微).

我在想:

  1. 未来的代码证明(我认为magento 2不会使用魔法吸气剂)
  2. 文体
  3. 性能
  4. 稳定性
  5. 使用1而不是另一个的任何其他原因

基于核心代码没有明确的方法,因为它使用了两者的混合

And*_*rew 9

没有一个答案适合所有情况,最好根据您使用的模型和特定用例来决定.

魔术方法的性能非常差,以及在每个访问器上从CamelCase转换为under_score的额外开销.

魔术方法基本上都是getData()的包装器,但需要额外的开销.

但是,使用魔术方法有一个优点,例如:

如果你使用getAttributeName()而不是getData('attribute_name')

在未来的某个时刻,模型可能会更新为包含一个真实的,具体的getAttributeName()方法,在这种情况下,您的代码仍然可以正常工作.但是,如果您使用了getData(),则可以直接访问该属性,并绕过新方法,该方法可能包括您正在绕过的一些重要计算.


mpa*_*per 3

在我看来,最安全的方法是始终使用getData($key). 魔法吸气剂使用与您已经指出的相同的方法。优点是您可以在代码中找到对 getData 的所有引用,并在方法getData()被重构时适当更改它。与此相比,必须找出所有魔术方法调用,它们的名称总是不同。第二件事是,当你有一个以相同方式命名的方法时,神奇的 getter 很容易搞砸你(我认为 getName() 曾经让我遇到过一次,并且花了相当长的时间来调试)。所以我的投票肯定是使用getData().