2010-07-25 71 views
5

我有一个定制的MVC PHP框架,我正在重写过程中,并且有一个关于性能和魔术方法的问题。对于框架的模型部分,我想如果魔法会导致太多的性能值得使用。我的意思是访问(读取和写入)模型数据将成为最常见的事情之一。是否使用__get/__set魔法方法对MVC框架的模型部分等重度使用功能的性能影响过大?__get/__ set/__用PHP调用性能问题

+0

你应该尝试找到另一种方式来使用它们,只有在必要时才使用它们。在我看来,除了速度缓慢之外,它们更难以阅读和维护。 – 2010-07-25 21:45:30

回答

8

衡量它。

它肯定有很大的性能影响,特别是考虑到函数调用在PHP中很贵。在下一版本的PHP中,这种差异会更大,它实现了优化,可以显着更快地定期访问已声明的实例属性。

也就是说,PHP很少是瓶颈。 I/O和数据库查询通常需要更多时间。但是,这取决于您的使用情况;只有这样才能确定它的基准。

这也是其他与魔术方法的可读性问题。他们经常退化成一个大的声明并损害代码的完成,这两者都可能在编程效率方面有所提升。

+3

有些IDE允许代码完成魔术方法,当[用@method注释类](http://manual.phpdoc.org/HTMLframesConverter/default/phpDocumentor/tutorial_tags.method.pkg.html) – Gordon 2010-07-25 20:48:03

+0

有一些[很好在YouTube上观看PHP内幕](http://www.youtube.com/watch?v=p5S1K60mhQU)。 – alex 2010-09-22 01:40:48

3

纯粹从我的经验来看,它增加了很多开销。在大约4000 __get的页面上(是的,该页面上有相当多的数据)性能显着降低,直到它变得不可接受。我丢弃了所有__set的& __get的变量,这些变量不需要更改其他数据或要检查外部依赖关系(如外键),之后生成该页面的时间约为15%的时间它采取之前。

0

我刚刚问过自己这个同样的问题,得出了同样的结论:最好用传统方式设置属性。 __get()+大量开关减慢一切下降

7

这是一个an article(三岁)与一些基准。运行你自己的测试,看看它如何影响你的代码。

一般来说,它们要慢得多。但他们是瓶颈吗?这取决于你在做什么。如果你关心速度,它会停止在哪里? foreach循环比for循环慢,但大多数人不会将其所有代码重写为使用for

只使用PHP意味着代码的速度并不是那么重要。就个人而言,我会赞成任何风格都可以更容易编程。