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

发布于 2022-09-01 13:07:22 字数 1486 浏览 45 评论 0

起因是因为有人建议尽量别使用静态方法,但是现在有的框架(laravel5 & yii2又大量使用静态方法,让我产生了矛盾。度娘告诉我静态方法会一直占用内存,但是速度会比动态方法快动态方法速度慢但运行完成后内存就销毁了。。。

测试环境如下(好像环境没有什么卵用?):

shellLinuxMint 17

PHP 5.6.9 (cli) (built: Jun 22 2015 00:06:37)

测试代码如下,很不专业的样子,望斧正:

php<?php 
class Test
{
    public function dongtai()
    {
        $i=time();
        $i++;
    }
    public static function jingtai()
    {
        $i=time();
        $i++;
    }
}
printf('memory usage: %01.2f MB', memory_get_usage()/1024/1024);
echo '<br/>';
$begin = microtime(1);
for ($i=0; $i < 1000000; $i++) { 
    (new Test())->dongtai(2);
}
echo microtime(1)-$begin,'<br/>';
printf('memory usage: %01.2f MB', memory_get_usage()/1024/1024);
echo '<br/>';
$begin = microtime(1);
for ($i=0; $i < 1000000; $i++) { 
    Test::jingtai(2);
}
echo microtime(1)-$begin,'<br/>';
printf('memory usage: %01.2f MB', memory_get_usage()/1024/1024);

测试结果如下:

memory usage: 0.23 MB
1.0004889965057
memory usage: 0.24 MB
0.86434984207153
memory usage: 0.24 MB

那么问题来了:

  1. 静态方法到底是不是如度娘所说,速度快但内存无法及时回收,动态方法速度慢但能及时回收内存
  2. 除此之外是否还有其它区别
  3. 是否不建议大量使用静态方法或者压根就不建议使用静态方法
  4. 我问这个问题之前可是问过度娘的啊,就是因为众说纷坛,SO。。。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

浮生未歇 2022-09-08 13:07:22

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

心碎的声音 2022-09-08 13:07:22

个人的观点是在适合的时候使用就行了,存在既有其存在的价值嘛。

比如Yii2中的helpers方法,你总不能先new下,然后在调用吧。

弥枳 2022-09-08 13:07:22

生成静态文件的话会好点吧

凉墨 2022-09-08 13:07:22

这点内存完全不是你考虑的范围 先保证数据库没瓶颈再说吧

番薯 2022-09-08 13:07:22

PHP的面向对象系统性能没有面向过程高!千万别用任何对象!一定要只用用面向过程的方式写!
PHP的框架都没有原始PHP直接输出HTML性能高!千万别用任何框架!一定要直接用PHP输出HTML!
逃)

惜醉颜 2022-09-08 13:07:22

该出手时就出手,没必要就别出手

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文