首页后端开发PHPPHP中如何形成static::与new static()的静态绑定

PHP中如何形成static::与new static()的静态绑定

时间2024-02-02 04:56:03发布访客分类PHP浏览930
导读:收集整理的这篇文章主要介绍了PHP中如何形成static::与new static( 的静态绑定,觉得挺不错的,现在分享给大家,也给大家做个参考。PHP中static::与new static( 之后期静态绑定一、parent、self、$...
收集整理的这篇文章主要介绍了PHP中如何形成static::与new static()的静态绑定,觉得挺不错的,现在分享给大家,也给大家做个参考。

PHP中static::与new static()之后期静态绑定

一、parent、self、$this、__CLASS__

class A {
}
class B extends A{
    parent::(public|PRotected)(静态方法|静态变量)  ===>
     parent永远是Aself::(public|protected)(静态方法|静态变量)  ===>
     self永远是B$this->
    (public|protected)(非静态方法|非静态变量)  ===>
     $this永远是B的是实例化对象__CLASS__    ===>
 永远是B}
 class C extends B{
    parent::(public|protected)(静态方法|静态变量)  ===>
     parent永远是Bself::(public|protected)(静态方法|静态变量)  ===>
     self永远是C$this->
    (public|protected)(非静态方法|非静态变量)  ===>
     $this永远是C的是实例化对象__CLASS__    ===>
 永远是C }
    

二、static::

static关键字可以实现以下功能:

1 调用类的静态方法 有后期静态绑定效果;

2 调用类的静态属性 有后期静态绑定效果;

3 调用类的非静态方法 没有后期静态绑定效果;

4 注意:不可以调用非静态属性;

class A {
    private static function foo() {
            echo "A success!\n";
    }
    public function test() {
             $this->
    foo();
    }
}
 class B extends A {
}
 class C extends A {
    private static function foo() {
        echo "C success!\n";
    }
}
     $b = new B();
    $b->
    test();
    //A success!$c = new C();
    $c->
    test();
    //A success!
class A {
    private static function foo() {
            echo "A success!\n";
    }
    public function test() {
            static::foo();
    }
}
 class B extends A {
}
 class C extends A {
    private static function foo() {
        echo "C success!\n";
    }
}
     $b = new B();
    $b->
    test();
    //A success!$c = new C();
    $c->
    test();
//A无法调用C里的私有foo方法     //将C的foo改成非private(public|protected)就可以解决class A {
    private static function foo() {
            echo "A success!\n";
    }
    public function test() {
            static::foo();
    }
}
 class B extends A {
}
 class C extends A {
    public static function foo() {
        echo "C success!\n";
    }
}
     $b = new B();
    $b->
    test();
    //A success!$c = new C();
    $c->
    test();
    //C success!
class A {
 public static function foo() {
         static::who();
 }
  public static function who() {
         echo __CLASS__."\n";
 }
}
 class B extends A {
 public static function test() {
         A::foo();
         parent::foo();
         self::foo();
 }
  public static function who() {
         echo __CLASS__."\n";
 }
}
class C extends B {
 public static function who() {
         echo __CLASS__."\n";
 }
 }
     C::test();
     A =>
    A::foo()的结果C =>
    parent::foo()能走到A的foo,里面static::who找C::whoC =>
self::foo()能走到B的foo,B继承A,走到A的foo,里面static::who找C::who     class A {
    protected static function foo() {
            static::who();
    }
     protected static function who() {
            echo __CLASS__."\n";
    }
}
 class B extends A {
    public static function test() {
            A::foo();
            parent::foo();
            self::foo();
    }
     protected static function who() {
            echo __CLASS__."\n";
    }
}
class C extends B {
    protected static function who() {
            echo __CLASS__."\n";
    }
 }
     C::test();
 //A C C,解释同上     class A {
 public static function foo() {
         static::who();
 }
  private static function who() {
         echo __CLASS__."\n";
 }
}
 class B extends A {
 public static function test() {
         A::foo();
         parent::foo();
         // self::foo();
   }
  private static function who() {
         echo __CLASS__."\n";
 }
}
class C extends B {
 private static function who() {
         echo __CLASS__."\n";
 }
 }
     C::test();
    //A =>
    A::foo()的结果 //报错 A不可C的私有方法who =>
     parent::foo()能走到A的foo,里面static::who找C::who,C的who只能在C里调用,不能在A里调用//报错 A不可C的私有方法who =>
     self::foo()能走到B的foo,B继承A,走到A的foo,里面static::who找C::who,C的who只能在C里调用,不能在A里调用

三、new static()

//new self()与new static()的区别,官网例子如下: class A {
  public static function get_self() {
        return new self();
  }
   public static function get_static() {
        return new static();
  }
}
 class B extends A {
}
     echo get_class(B::get_self());
     // Aecho get_class(B::get_static());
     // Becho get_class(A::get_static());
     // A

推荐教程:《PHP视频教程》

以上就是PHP中如何形成static::与new static()的静态绑定的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: PHP中如何形成static::与new static()的静态绑定
本文地址: https://pptw.com/jishu/596388.html
PHP中$是什么意思? PHP还能开发什么?

游客 回复需填写必要信息