【发布时间】:2012-10-10 14:04:16
【问题描述】:
我正在开发一个每秒可查看数十个并发用户的 Web 应用程序。我有一个类将在同一页面加载中多次实例化。在那个类中,我有一些属性在每个对象中总是相同的,所以我正在考虑将这些属性声明为static,以减少在实例化此类的多个实例时将使用的内存在同一页面请求期间。
这样做会不会因为 PHP 只能存储一次静态属性的值而为该应用程序使用更少的内存?这样做会在并发用户之间节省内存,还是只在每个 PHP 进程中节省内存?
这对方法有什么作用?如果这意味着对象可以回收相同的方法,那么如果你想节省内存,为什么不能将类的所有方法都声明为静态?
我不太明白为什么以及何时将属性或方法声明为静态的,但我明白将它们声明为静态允许在不实例化类对象的情况下访问它们(这感觉就像一个 hack ...这些方法和属性应该在其他地方...不是吗?)。我对static 声明影响内存使用的方式特别感兴趣,以努力使我的 Web 服务器上的内存使用尽可能低……总的来说,我对正在发生的事情有更好的了解。
【问题讨论】:
-
我不明白为什么它被关闭了。这个问题非常具体,肯定有一个准确且无可争议的答案。
-
非常好的和准确的问题,但我想指出 PHP 中函数的可见性(源自 OOP)对于您的问题“如果这意味着对象可以回收相同方法,那么如果你想节省内存,为什么不将一个类的所有方法都声明为静态?”。有些函数可能是静态的,有些函数不能是静态的——可以说,获取/设置类变量的函数取决于类初始化过程。主要限制是您当时正在处理的对象(实例化)。
标签: php memory-management memory-leaks static-methods