我正在开发一个每秒可处理数十个并发用户的 Web 应用程序。我有一个将在同一页面加载中多次实例化的类。在那个类中,我有一些属性在每个对象中总是相同的,所以我正在考虑将这些属性声明为 static
以减少多个实例时将使用的内存此类在同一页面请求期间实例化。
因为 PHP 只能存储静态属性的值一次,这样做是否会为该应用程序使用更少的内存?这样做会跨并发用户节省内存,还是只节省每个 PHP 进程内的内存?
这对方法有何作用?如果这意味着对象可以回收相同的方法,那么如果您想节省内存,为什么不将一个类的所有方法都声明为静态的呢?
我对为什么以及何时将属性或方法声明为静态感到不太舒服,但我确实理解将它们声明为静态允许在不实例化类的对象的情况下访问它们(这感觉像是一种 hack ...这些方法和属性应该在其他地方...不是吗?)。我对 static
声明影响内存使用的方式特别感兴趣,以努力使我的网络服务器上的内存使用率尽可能低......总的来说,所以我更好地理解了什么正在进行中。
最佳答案
当您将类方法/变量声明为静态时,它会绑定(bind)到类而不是对象并由类共享。从内存管理的角度来看,这意味着当类定义被加载到堆内存中时,这些静态对象就在那里创建。当在堆栈内存中创建类的实际对象并且完成对静态属性的更新时,指向包含静态对象的堆的指针也会更新。这确实有助于减少内存,但幅度不大。
从编程范式来看,人们通常选择使用静态变量是为了架构优势,而不是内存管理优化。换句话说,当一个人想要实现单例或工厂模式时,可能会像您提到的那样创建静态变量。它提供了更强大的方式来了解在“类”级别发生的事情,而不是在“对象”级别发生的事情。
关于php - 在 PHP 中使用静态方法和属性会占用更少的内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12983029/