【问题标题】:Automatic Getter and Setter Performance options instead of __call自动 Getter 和 Setter 性能选项而不是 __call
【发布时间】:2012-05-15 08:22:06
【问题描述】:

我正在寻找不必在我的代码中编写 getter 和 setter 的选项。

目前我正在使用 __call 自动将 getter 和 setter 映射到我的属性,但是我被告知这非常慢。

我有什么选择,因为编写 getter 和 setter 只返回属性并不能很好地利用我们的开发人员时间,维护它们更让人头疼

【问题讨论】:

  • 一些 ide 可以为你做这件事。代码生成未得到充分利用。

标签: php oop


【解决方案1】:

虽然__call() 的性能可能不是很好,但我看到的唯一替代方案是从 IDE 生成代码。这也改进了许多最近的编辑器具有的代码洞察功能,允许编辑器在您键入代码时建议方法名称;非常方便的东西!

另请参阅:How to generate getter and setter in eclipse (php)

顺便说一句 - __get()__set() 可能会有相同的性能问题,现在引入它们将极大地改变您现有的代码(不是一个好主意)。

编辑

我找不到任何谈论如何动态维护 getter 和 setter 的好文章,所以我想到了另一种方法(可能适合你,也可能不适合你)。

您可以编写一个代码转换器,使用tokenizerReflection(或同时使用两者)为您完成维护工作。这应该在保存时集成到 IDE 中,或者每次文件更改时都必须动态完成。

无论如何,只是一个想法:)

【讨论】:

  • IDE 可以为我生成 getter 和 setter,是的,但是由于我在基于迭代的开发环境中工作,更改是“高速”的,所以我们可能会发现 40 - 50%随着我们的移动,这些属性可能会发生变化。使 docblocks 保持最新是一项挑战
【解决方案2】:

好吧,您可以使用 __set() 和 __get(),或者创建公共属性。我还没有听说过任何其他“魔法”方法可以做到这一点。

【讨论】:

  • 那会改变现有的代码;想象一下,必须将您所有的 ->getVariable() 重命名为 ->variable ...当其他人使用您的 API 时,情况会变得更糟
  • 我不使用公共属性的原因是使用 getter 和 setter 来执行项目发展过程中可能需要的任何转换和/或验证
  • 所以我想只有从 IDE 生成的方法才能解决问题。
猜你喜欢
  • 2014-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-05
  • 2014-11-03
  • 2016-12-21
  • 1970-01-01
  • 2015-01-11
相关资源
最近更新 更多