首页 > 解决方案 > 以下哪一项是从 PHP 类中的函数获取值的最佳实践?

问题描述

我在课堂上有这个功能:

my_class::my_function()

它返回 5。

如果我这样做:

$total = $something + my_class::my_function();
$total2 = $something2 + my_class::my_function();
$total3 = $something3 + my_class::my_function();

它是否比以下效率低:

$something_else = my_class::my_function();

$total = $something + $something_else;
$total2 = $something2 + $something_else;
$total3 = $something3 + $something_else;

标签: phpclassobject

解决方案


TL;博士

从架构的角度做正确的事,忘记尝试自己进行微优化。如果要在所有计算中使用相同的值,请缓存该值。

解释。

在 PHP 中调用任何函数都会产生开销。当你调用一个函数时,PHP 必须在内存中创建一个堆栈帧,其中包含有关调用的信息,例如参数值、代码中的位置等。这需要一些时间,也会占用一些内存。这需要的内存量会有所不同,但通常不会很多,因为 PHP 通过引用传递对象和写时复制机制。因此,除非您在函数中修改大型字符串/二进制数据,否则开销应该可以忽略不计。不过,您应该使用第二种方法,即“缓存”值的方法,因为从消费者的 PoV 来看,在任何情况下都不能my_function() 保证每次都返回相同的值。

年复一年,PHP 越来越优化。示例包括 zVal 和 opcache。这些改进导致理智指令的自动优化。试图修改这个实际上可能会导致 PHP 无法优化您的程序。非常有知识和能力的人正在为此努力,您不需要做任何特别的事情来从自动优化中受益。相反,应关注代码的架构和概念准确性,以及规范化。编译器越来越优化,硬件每年都在变得更好更便宜,无需您的参与;但您的代码不会自行规范化


推荐阅读