在 PHP 中使用静态方法和属性是否会占用更少的内存?

2023-12-31

我正在开发一个每秒有数十个并发用户的 Web 应用程序。我有一个类将在同一页面加载中多次实例化。在该类中,我有一些属性在每个对象中始终相同,因此我正在考虑将这些属性声明为static努力减少在同一个页面请求期间实例化此类的多个实例时将使用的内存。

由于 PHP 只能存储一次静态属性的值,因此该应用程序会使用更少的内存吗?这样做会节省并发用户之间的内存,还是仅在每个 PHP 进程内节省内存?

这对于方法来说是如何工作的?如果这意味着对象可以回收相同的方法,那么如果您想节省内存,为什么不将类的所有方法声明为静态呢?

我不太清楚为什么以及何时将属性或方法声明为静态,但我确实理解将它们声明为静态允许在不实例化类的对象的情况下访问它们(这感觉像是一种黑客......这些方法和属性应该在其他地方......不是吗?)。我对a的方式特别感兴趣static声明会影响内存使用量,以尽量降低我的网络服务器上的内存使用量……总的来说,这样我就可以更好地了解正在发生的事情。


当您将类方法/变量声明为静态时,它会绑定到类(而不是对象)并由类共享。从内存管理的角度来看,这意味着当类定义被加载到堆内存中时,这些静态对象就会在那里创建。当在堆栈内存中创建类的实际对象并且完成静态属性的更新时,指向包含静态对象的堆的指针将被更新。这确实有助于减少内存,但幅度不大。

从编程范式来看,人们通常选择使用静态变量是为了架构优势而不是内存管理优化。换句话说,当一个人想要实现单例或工厂模式时,可能会创建像你提到的静态变量。它提供了更强大的方法来了解“类”级别上发生的事情,而不是“对象”级别上发生的事情。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 PHP 中使用静态方法和属性是否会占用更少的内存? 的相关文章

随机推荐