5

我有一个定制的 MVC PHP 框架,我正在重写它,并且对性能和魔术方法有疑问。对于框架的模型部分,我在想__get/__set魔术方法是否会导致太多的性能损失值得使用。我的意思是访问(读取和写入)模型数据将是最常见的事情之一。对于像 MVC 框架的模型部分这样的重度使用功能来说,使用__get/__set魔术方法对性能的影响太大了吗?

4

4 回答 4

9

测量它。

它肯定会对性能造成很大影响,尤其是考虑到 PHP 中的函数调用成本很高。在 PHP 的下一个版本中,这种差异会更大,它实现了优化,可以显着加快对声明的实例属性的定期访问。

也就是说,PHP 很少是瓶颈。I/O 和数据库查询经常需要更多时间。但是,这取决于您的使用情况;确定它进行基准测试的唯一方法。

这也是魔术方法的其他可读性问题。它们经常退化为一个大switch语句并损害代码完成,这两者都可能会影响编程效率。

于 2010-07-25T20:23:06.523 回答
8

这是一篇带有一些基准的文章(三年前)。运行您自己的测试以查看它如何影响您的代码。

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

仅使用 PHP 意味着您的代码速度并不是那么关键。就个人而言,我更喜欢任何能让编程更容易的风格。

于 2010-09-22T01:37:59.663 回答
3

纯粹根据我的经验,它确实增加了很多开销。在大约 4000 的页面上__get(是的,该页面上有相当多的数据)性能相当慢,以至于它变得不可接受。对于不需要更改其他数据或检查外部依赖项(如外键)的变量,我丢弃了所有__set's & 's,之后生成该页面的时间大约是它所花费时间的 15%__get前。

于 2010-07-25T20:27:32.660 回答
0

我刚刚问了自己同样的问题并得出了同样的结论:最好以传统方式设置属性。__get() + 大开关减慢一切

于 2010-09-22T01:30:25.857 回答