• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

php 搞代码 4年前 (2022-01-25) 18次浏览 已收录 0个评论
文章目录[隐藏]

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

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

<code>shell</code><code>LinuxMint 17PHP 5.6.9 (cli) (built: Jun 22 2015 00:06:37)</code>

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

<code>php</code><code><?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 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);</code>

测试结果如下:

<code>memory usage: 0.23 MB1.0004889965057memory usage: 0.24 MB0.86434984207153memory usage: 0.24 MB</code>

那么问题来了:

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

回复内容:

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

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

<code>shell</code><code>LinuxMint 17PHP 5.6.9 (cli) (built: Jun 22 2015 00:06:37)</code>

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

<code>php</code><code><?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)<div>……本2文来源gaodai.ma#com搞##代!^码@网3</div><code>搞代gaodaima码</code>;echo '<br />';$begin = microtime(1);for ($i=0; $i 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);</code>

测试结果如下:

<code>memory usage: 0.23 MB1.0004889965057memory usage: 0.24 MB0.86434984207153memory usage: 0.24 MB</code>

那么问题来了:

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

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

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

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

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

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

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

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


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:php静态方法到底应不应该使用?

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址