static声明静态属性,就可以不实例化类而直接访问
他说的提速估计只是对能直接访问不需要实例化的属性 public的
但对于private保护的属性外部是无法直接访问的 所以也就没有提速一说了

解决方案 »

  1.   

    实践是检验真理的唯一标准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结论你自己下
      

  2.   

    依 #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 倍之多
      

  3.   

    是几倍我就不关心了,我只关心是否快了。
    anyway,感谢各位的热心参与。
      

  4.   

    “如果能将类的方法定义成 static,就尽量定义成 static”
    如果按这句话来说倒是对的
    但怎样才算"能"?如果大部分方法都弄成static,在某种意义上就不是面向对象的思维了类和对象我觉得更多更大的考虑是它们之间的起承转接~
    以上纯个人意见
      

  5.   

    使用单例模式的话对象只new一次
    也多消耗2#的那点时间和new一次对象时间,差不多可以忽略了
    但是说起来单例还是比静态方法慢一丁点啊,还占了点内存,但是单例支持继承...
      

  6.   

    理论上来说肯定是的,实际性能差别在今天的计算机上肯定不是很明显。new一下整个类被实例化为对象。如果是static方法的话,类只相当于一个name space的作用,把隶属于其name space下的函数call出来