1.static与self的区别:

  1. class A {
  2. public static function get_self() {
  3. return new self();
  4. }
  5. public static function get_static() {
  6. return new static();
  7. }
  8. }
  9. class B extends A {}
  10. echo get_class(B::get_self()); // A
  11. echo get_class(B::get_static()); // B
  12. echo get_class(A::get_static()); // A
  1. self - 就是这个(self第一次出现的那个)类,是代码段里面的这个类。
  2. static - PHP 5.3加进来的只得是当前这个类,有点像$this的意思,从堆内存中提取出来,访问的是当前实例化的那个类,那么 static 代表的就是那个类。
class ATest {

    public function say()
    {
        echo 'Segmentfault';
    }

    public function callSelf()
    {
        self::say();
    }

    public function callStatic()
    {
        static::say();
    }
}

class BTest extends ATest {
    public function say()
    {
        echo 'PHP';
    }
}

$b = new BTest();
$b->say(); // output: php
$b->callSelf(); // output: segmentfault
$b->callStatic(); // output: php