__使用PHP获取/设置/调用性能问题

__使用PHP获取/设置/调用性能问题,php,performance,magic-methods,Php,Performance,Magic Methods,我有一个定制的MVC PHP框架,我正在重写这个框架,并且对性能和神奇的方法有疑问。对于框架的模型部分,我想如果\uuuu get/\uu set魔术方法会导致太多的性能损失,不值得使用。我的意思是访问(读和写)模型数据将是执行的最常见的事情之一。对于像MVC框架的模型部分这样的大量使用功能来说,使用\uuu get/\uu set魔术方法对性能的影响是否太大 它当然会对性能造成很大的影响,特别是考虑到PHP中函数调用的开销。在PHP的下一个版本中,这种差异将更大,它实现了优化,使对声明的实例属

我有一个定制的MVC PHP框架,我正在重写这个框架,并且对性能和神奇的方法有疑问。对于框架的模型部分,我想如果
\uuuu get
/
\uu set
魔术方法会导致太多的性能损失,不值得使用。我的意思是访问(读和写)模型数据将是执行的最常见的事情之一。对于像MVC框架的模型部分这样的大量使用功能来说,使用
\uuu get
/
\uu set
魔术方法对性能的影响是否太大

它当然会对性能造成很大的影响,特别是考虑到PHP中函数调用的开销。在PHP的下一个版本中,这种差异将更大,它实现了优化,使对声明的实例属性的常规访问大大加快

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


这也是magic方法的其他可读性问题。它们经常退化为一个大的
开关
语句和折衷的代码完成,这两个语句都可能会影响编程效率。

纯粹根据我的经验,它确实会增加相当多的开销。在一个大约有4000个
\uuu get
的页面上(是的,该页面上有很多数据),性能相当慢,以至于无法接受。我扔掉了所有变量的
\uuu set
\uu get
,这些变量不需要更改其他数据或检查外部依赖性(如外键),之后,生成该页面的时间大约是以前的15%。

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

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

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


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

有些IDE允许在有魔法方法的情况下完成代码。您应该尝试另一种方法来使用它们,并且只在必要时使用它们。在我看来,它们不仅速度慢,而且更难阅读和维护。