【问题标题】:Which of these is best practice for getting values from a function within a class in PHP?以下哪一项是从 PHP 类中的函数获取值的最佳实践?
【发布时间】:2019-02-15 12:59:58
【问题描述】:

我在课堂上有这个功能:

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;

【问题讨论】:

  • 是的,因为您正在添加一个函数/方法调用,这会增加开销,但我们说的是微不足道的。至于首先使用静态的最佳实践通常不是(但可以取决于用例)
  • 取决于my_function 正在做什么来产生结果。如果它做了很多工作,那么你的工作量就会增加三倍。更重要的是,如果 my_function 预计不会在每次调用时返回不同的结果,那么后一个示例似乎更清楚这一点。
  • 不错的投票理由。 /s

标签: php class object


【解决方案1】:

TL;DR

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

解释。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    相关资源
    最近更新 更多