关于static的议论
程序员文章站
2024-01-18 11:12:22
...
关于static的讨论
之前我提问过static private和private的区别,老徐则说只是访问方式的区别,我接着说网上有人说static能提高性能,老徐抱有不同见解。
今天,我又再次看到有人这么说了:1、如果能将类的方法定义成 static,就尽量定义成 static,它的速度会提升将近 4 倍。
这个说法来自于: http://www.php100.com/html/it/focus/2014/0403/6746.html
不知道这个说法是真是假,作者又是怎么测试并肯定地提出这个说法的呢?
------解决方案--------------------
static声明静态属性,就可以不实例化类而直接访问
他说的提速估计只是对能直接访问不需要实例化的属性 public的
但对于private保护的属性外部是无法直接访问的 所以也就没有提速一说了
------解决方案--------------------
实践是检验真理的唯一标准
独立函数 0.203125
对象方法 0.21875
结论你自己下
------解决方案--------------------
我感觉看你怎么比较囖?
像楼上的比较方式是把 创建对象消耗的性能跟时间排除了 做比较
如果把创建对象放循环里面 对象方法所需时间要更长些
纯属个人看法
------解决方案--------------------
“如果能将类的方法定义成 static,就尽量定义成 static”
如果按这句话来说倒是对的
但怎样才算"能"?如果大部分方法都弄成static,在某种意义上就不是面向对象的思维了
类和对象我觉得更多更大的考虑是它们之间的起承转接~
以上纯个人意见
------解决方案--------------------
使用单例模式的话对象只new一次
也多消耗2#的那点时间和new一次对象时间,差不多可以忽略了
但是说起来单例还是比静态方法慢一丁点啊,还占了点内存,但是单例支持继承...
------解决方案--------------------
理论上来说肯定是的,实际性能差别在今天的计算机上肯定不是很明显。
new一下整个类被实例化为对象。如果是static方法的话,类只相当于一个name space的作用,把隶属于其name space下的函数call出来
之前我提问过static private和private的区别,老徐则说只是访问方式的区别,我接着说网上有人说static能提高性能,老徐抱有不同见解。
今天,我又再次看到有人这么说了:1、如果能将类的方法定义成 static,就尽量定义成 static,它的速度会提升将近 4 倍。
这个说法来自于: http://www.php100.com/html/it/focus/2014/0403/6746.html
不知道这个说法是真是假,作者又是怎么测试并肯定地提出这个说法的呢?
------解决方案--------------------
static声明静态属性,就可以不实例化类而直接访问
他说的提速估计只是对能直接访问不需要实例化的属性 public的
但对于private保护的属性外部是无法直接访问的 所以也就没有提速一说了
------解决方案--------------------
实践是检验真理的唯一标准
class T {静态方法 0.203125
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; $iecho '静态方法 ',microtime(1) - $t, PHP_EOL;
$t1 = microtime(1);
for($i=0; $iecho '独立函数 ', microtime(1) - $t1, PHP_EOL;
$t2 = microtime(1);
for($i=0; $ifoo1($i);
echo '对象方法 ', microtime(1) - $t2, PHP_EOL;
独立函数 0.203125
对象方法 0.21875
结论你自己下
------解决方案--------------------
我感觉看你怎么比较囖?
像楼上的比较方式是把 创建对象消耗的性能跟时间排除了 做比较
如果把创建对象放循环里面 对象方法所需时间要更长些
纯属个人看法
------解决方案--------------------
“如果能将类的方法定义成 static,就尽量定义成 static”
如果按这句话来说倒是对的
但怎样才算"能"?如果大部分方法都弄成static,在某种意义上就不是面向对象的思维了
类和对象我觉得更多更大的考虑是它们之间的起承转接~
以上纯个人意见
------解决方案--------------------
使用单例模式的话对象只new一次
也多消耗2#的那点时间和new一次对象时间,差不多可以忽略了
但是说起来单例还是比静态方法慢一丁点啊,还占了点内存,但是单例支持继承...
------解决方案--------------------
理论上来说肯定是的,实际性能差别在今天的计算机上肯定不是很明显。
new一下整个类被实例化为对象。如果是static方法的话,类只相当于一个name space的作用,把隶属于其name space下的函数call出来
相关文章
相关视频
上一篇: 如何处理大量数据
下一篇: 关于ThinkPHP模板图片路径