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

起因是因为有人建议尽量别使用静态方法,但是现在有的框架(laravel5&yii2又大量使用静态方法,让我产生了矛盾。度娘告诉我静态方法会一直占用内存,但是速度会比动态方法快;动态方法速度慢但运行完成后内存就销毁了。。。
测试环境如下(好像环境没有什么卵用?):
shellLinuxMint17
PHP5.6.9(cli)(built:Jun22201500:06:37)
测试代码如下,很不专业的样子,望斧正:
phpclassTest
{
publicfunctiondongtai()
{
$i=time();
$i++;
}
publicstaticfunctionjingtai()
{
$i=time();
$i++;
}
}
printf('memoryusage:%01.2fMB',memory_get_usage()/1024/1024);
echo'
';
$begin=microtime(1);
for($i=0;$i<1000000;$i++){
(newTest())->dongtai(2);
}
echomicrotime(1)-$begin,'
';
printf('memoryusage:%01.2fMB',memory_get_usage()/1024/1024);
echo'
';
$begin=microtime(1);
for($i=0;$i<1000000;$i++){
Test::jingtai(2);
}
echomicrotime(1)-$begin,'
';
printf('memoryusage:%01.2fMB',memory_get_usage()/1024/1024);
测试结果如下:
memoryusage:0.23MB
1.0004889965057
memoryusage:0.24MB
0.86434984207153
memoryusage:0.24MB
那么问题来了:
静态方法到底是不是如度娘所说,速度快但内存无法及时回收,动态方法速度慢但能及时回收内存?
除此之外是否还有其它区别?
是否不建议大量使用静态方法或者压根就不建议使用静态方法?
我问这个问题之前可是问过度娘的啊,就是因为众说纷坛,SO。。。
蝴蝶不菲
浏览 279回答 2
2回答

达令说

主要是语义上的差别,实例方法(你说的动态方法)与实例有关,静态方法与实例无关。要调用实例方法先要创建实例,创建实例可能有开销,但性能上的差别并不重要,主要还是看语义。

呼唤远方

个人的观点是在适合的时候使用就行了,存在既有其存在的价值嘛。比如Yii2中的helpers方法,你总不能先new下,然后在调用吧。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript