首页 / PHP / 关于static的讨论
关于static的讨论
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了关于static的讨论,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3338字,纯文字阅读大概需要5分钟。
内容图文
![关于static的讨论](/upload/InfoBanner/zyjiaocheng/199/c3a2e7f0eecb4d31a68562b179930ded.jpg)
今天,我又再次看到有人这么说了:1、如果能将类的方法定义成 static,就尽量定义成 static,它的速度会提升将近 4 倍。
这个说法来自于: http://www.php100.com/html/it/focus/2014/0403/6746.html
不知道这个说法是真是假,作者又是怎么测试并肯定地提出这个说法的呢?
回复讨论(解决方案)
static声明静态属性,就可以不实例化类而直接访问
他说的提速估计只是对能直接访问不需要实例化的属性 public的
但对于private保护的属性外部是无法直接访问的 所以也就没有提速一说了
实践是检验真理的唯一标准
class T { static function foo($n) { return $n + 1; } function foo1($n) { return $n + 1; }}function foo($n) { return $n + 1;}$p = new T;$k = 1000000;$t = microtime(1);for($i=0; $i<$k; $i++) T::foo($i);echo '静态方法 ',microtime(1) - $t, PHP_EOL;$t1 = microtime(1);for($i=0; $i<$k; $i++) foo($i);echo '独立函数 ', microtime(1) - $t1, PHP_EOL;$t2 = microtime(1);for($i=0; $i<$k; $i++) $p->foo1($i);echo '对象方法 ', microtime(1) - $t2, PHP_EOL;静态方法 0.203125
独立函数 0.203125
对象方法 0.21875
结论你自己下
我感觉看你怎么比较??
像楼上的比较方式是把 创建对象消耗的性能跟时间排除了 做比较
如果把创建对象放循环里面 对象方法所需时间要更长些
纯属个人看法
依 #3 的说法,加上
$t3 = microtime(1);for($i=0; $i<$k; $i++) { $p = new T; $p->foo1($i);}echo '对象方法 ', microtime(1) - $t3, PHP_EOL;静态方法 0.234375
独立函数 0.1875
对象方法 0.234375
对象方法 0.40625
也不会有 4 倍之多
第一次:静态方法 0.22201204299927 独立函数 0.20401191711426 对象方法 0.25601506233215
第二次:静态方法 0.23101305961609 独立函数 0.20001196861267 对象方法 0.25701403617859
第三次:静态方法 0.22401285171509 独立函数 0.19801115989685 对象方法 0.25601482391357
第四次:静态方法 0.22301316261292 独立函数 0.20001101493835 对象方法 0.25901484489441
第五次:静态方法 0.22701287269592 独立函数 0.19801211357117 对象方法 0.25701403617859
第六次:静态方法 0.22201204299927 独立函数 0.19901204109192 对象方法 0.26201510429382
第七次:静态方法 0.22201204299927 独立函数 0.20001196861267 对象方法 0.25901484489441
第八次:静态方法 0.22301316261292 独立函数 0.19801092147827 对象方法 0.25801491737366
第九次:静态方法 0.22201204299927 独立函数 0.19801187515259 对象方法 0.26101493835449
第十次:静态方法 0.22201299667358 独立函数 0.20601105690002 对象方法 0.26201486587524
我这里测试的结果是这样的,无论怎么看,对象方法耗时都比静态方法要长一点点。可能作者指的就是这个意思吧。
是几倍我就不关心了,我只关心是否快了。
anyway,感谢各位的热心参与。
如果你很关心这亿分之几秒的时间,那就这样吧
如果这么纠结, 可以自己去研究一下缘代码,就知道情况了
“如果能将类的方法定义成 static,就尽量定义成 static”
如果按这句话来说倒是对的
但怎样才算"能"?如果大部分方法都弄成static,在某种意义上就不是面向对象的思维了
类和对象我觉得更多更大的考虑是它们之间的起承转接~
以上纯个人意见
使用单例模式的话对象只new一次
也多消耗2#的那点时间和new一次对象时间,差不多可以忽略了
但是说起来单例还是比静态方法慢一丁点啊,还占了点内存,但是单例支持继承...
理论上来说肯定是的,实际性能差别在今天的计算机上肯定不是很明显。
new一下整个类被实例化为对象。如果是static方法的话,类只相当于一个name space的作用,把隶属于其name space下的函数call出来
感谢大家的热心帮助和讨论,我获益良多
内容总结
以上是互联网集市为您收集整理的关于static的讨论全部内容,希望文章能够帮你解决关于static的讨论所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。