【问题标题】:Does using Final in a class use less memory?在类中使用 Final 会使用更少的内存吗?
【发布时间】:2021-10-09 07:49:56
【问题描述】:

我想知道从 FINAL 类创建的对象会使用更少的内存吗?还是 FINAL 只是类的“配置”?

【问题讨论】:

  • final 类使用更少的内存没有内在的原因。由于特定 PHP 版本中的某些内部优化原因,它可能 或可能不会使用更少的内存,但因为它只是一个内部优化,在下一个 PHP 版本中可能会或可能不会出现这种情况。手册在这方面没有提及或保证任何事情,所以只是假设内存使用与它为零。
  • final 暗示解释器需要执行额外的检查,所以我不会惊讶地发现内存使用量有小幅增加。但是,如前所述,它属于 PHP 内部,可能没有什么值得考虑的。
  • @Álvaro 我希望编译器必须按照for c in chain_of_parents(cls): if c.final: throw new Exception 的行对任何扩展类执行该检查。在这种情况下,final 只是一个属性,不会产生任何额外的处理或内存。这只是我的猜测,还没有看过实际的实现。

标签: php oop


【解决方案1】:

final 关键字的目的基本上是防止类被扩展。内存不应该是一个问题。

final 关键字通过在定义前加上 final 来防止子类覆盖方法。如果类本身被定义为 final 则不能扩展。

final on www.php.net

这也适用于 when trying to mock such a class in unit tests 的最大缺点。

如果你想模拟这样一个类,你必须使用某些库来即时删除 final 关键字。 (例如:dg/bypass-finals)。它在某些项目中可能有意义,尽管我几乎不认为它有用。我没有按照约定扩展某些类,而不是依赖 final 关键字作为类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-29
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    • 1970-01-01
    • 2011-09-06
    相关资源
    最近更新 更多