您好,欢迎访问一九零五行业门户网

php静态方法到底应不应该使用?

起因是因为有人建议尽量别使用静态方法,但是现在有的框架(laravel5 & yii2又大量使用静态方法,让我产生了矛盾。度娘告诉我静态方法会一直占用内存,但是速度会比动态方法快;动态方法速度慢但运行完成后内存就销毁了。。。
测试环境如下(好像环境没有什么卵用?):
shelllinuxmint 17php 5.6.9 (cli) (built: jun 22 2015 00:06:37)

测试代码如下,很不专业的样子,望斧正:
php ';$begin = microtime(1);for ($i=0; $i dongtai(2);}echo microtime(1)-$begin,'
';printf('memory usage: %01.2f mb', memory_get_usage()/1024/1024);echo '
';$begin = microtime(1);for ($i=0; $i ';printf('memory usage: %01.2f mb', memory_get_usage()/1024/1024);

测试结果如下:
memory usage: 0.23 mb1.0004889965057memory usage: 0.24 mb0.86434984207153memory usage: 0.24 mb

那么问题来了:
静态方法到底是不是如度娘所说,速度快但内存无法及时回收,动态方法速度慢但能及时回收内存?除此之外是否还有其它区别?是否不建议大量使用静态方法或者压根就不建议使用静态方法?我问这个问题之前可是问过度娘的啊,就是因为众说纷坛,so。。。回复内容: 起因是因为有人建议尽量别使用静态方法,但是现在有的框架(laravel5 & yii2又大量使用静态方法,让我产生了矛盾。度娘告诉我静态方法会一直占用内存,但是速度会比动态方法快;动态方法速度慢但运行完成后内存就销毁了。。。
测试环境如下(好像环境没有什么卵用?):
shelllinuxmint 17php 5.6.9 (cli) (built: jun 22 2015 00:06:37)

测试代码如下,很不专业的样子,望斧正:
php ';$begin = microtime(1);for ($i=0; $i dongtai(2);}echo microtime(1)-$begin,'
';printf('memory usage: %01.2f mb', memory_get_usage()/1024/1024);echo '
';$begin = microtime(1);for ($i=0; $i ';printf('memory usage: %01.2f mb', memory_get_usage()/1024/1024);

测试结果如下:
memory usage: 0.23 mb1.0004889965057memory usage: 0.24 mb0.86434984207153memory usage: 0.24 mb

那么问题来了:
静态方法到底是不是如度娘所说,速度快但内存无法及时回收,动态方法速度慢但能及时回收内存?除此之外是否还有其它区别?是否不建议大量使用静态方法或者压根就不建议使用静态方法?我问这个问题之前可是问过度娘的啊,就是因为众说纷坛,so。。。
主要是语义上的差别,实例方法(你说的动态方法)与实例有关,静态方法与实例无关。
要调用实例方法先要创建实例,创建实例可能有开销,但性能上的差别并不重要,主要还是看语义。
个人的观点是在适合的时候使用就行了,存在既有其存在的价值嘛。
比如yii2中的helpers方法,你总不能先new下,然后在调用吧。
生成静态文件的话会好点吧
这点内存完全不是你考虑的范围 先保证数据库没瓶颈再说吧
该出手时就出手,没必要就别出手
php的面向对象系统性能没有面向过程高!千万别用任何对象!一定要只用用面向过程的方式写!
php的框架都没有原始php直接输出html性能高!千万别用任何框架!一定要直接用php输出html!
逃)
其它类似信息

推荐信息