PHP中如何实现static::与new static()的静态方法调用绑定?

更新于
2026-09-30 10:44:24
1阅读来源:SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1008个文字,预计阅读时间需要5分钟。

PHP中如何实现static::与new static()的静态方法调用绑定?

在PHP中,`static::` 与 `new static()` 后的静态绑定:

1. `static::` 用于访问静态属性和方法。

2.`new static()` 用于创建当前类的一个静态实例。

后期静态绑定:

- `parent::` 用于访问父类的静态属性和方法。

PHP中如何实现static::与new static()的静态方法调用绑定?

- `self::` 用于访问当前类的静态属性和方法。- `$this` 用于访问当前对象的方法和属性。- `__CLASS__` 用于获取当前类的名称。- `class A` 和 `class B extends A` 表示类A和B的继承关系。

在类B中,如果使用 `parent`、`self`、`$this`、`__CLASS__` 和 `class A` 访问静态方法或变量,它们的绑定效果如下:

- `parent::` 等同于 `A::`,即绑定到父类A。- `self::` 等同于 `B::`,即绑定到当前类B。- `$this` 用于访问类B的实例属性和方法。- `__CLASS__` 返回字符串 B,表示当前类B。- `class A` 表示父类A。

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

一、parent、self、$this、__CLASS__

class A {} class B extends A{ parent::(public|protected)(静态方法|静态变量) ===> parent永远是A self::(public|protected)(静态方法|静态变量) ===> self永远是B $this->(public|protected)(非静态方法|非静态变量) ===> $this永远是B的是实例化对象 __CLASS__ ===> 永远是B } class C extends B{ parent::(public|protected)(静态方法|静态变量) ===> parent永远是B self::(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::who C =>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()); // A echo get_class(B::get_static()); // B echo get_class(A::get_static()); // A

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

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

标签:静态

本文共计1008个文字,预计阅读时间需要5分钟。

PHP中如何实现static::与new static()的静态方法调用绑定?

在PHP中,`static::` 与 `new static()` 后的静态绑定:

1. `static::` 用于访问静态属性和方法。

2.`new static()` 用于创建当前类的一个静态实例。

后期静态绑定:

- `parent::` 用于访问父类的静态属性和方法。

PHP中如何实现static::与new static()的静态方法调用绑定?

- `self::` 用于访问当前类的静态属性和方法。- `$this` 用于访问当前对象的方法和属性。- `__CLASS__` 用于获取当前类的名称。- `class A` 和 `class B extends A` 表示类A和B的继承关系。

在类B中,如果使用 `parent`、`self`、`$this`、`__CLASS__` 和 `class A` 访问静态方法或变量,它们的绑定效果如下:

- `parent::` 等同于 `A::`,即绑定到父类A。- `self::` 等同于 `B::`,即绑定到当前类B。- `$this` 用于访问类B的实例属性和方法。- `__CLASS__` 返回字符串 B,表示当前类B。- `class A` 表示父类A。

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

一、parent、self、$this、__CLASS__

class A {} class B extends A{ parent::(public|protected)(静态方法|静态变量) ===> parent永远是A self::(public|protected)(静态方法|静态变量) ===> self永远是B $this->(public|protected)(非静态方法|非静态变量) ===> $this永远是B的是实例化对象 __CLASS__ ===> 永远是B } class C extends B{ parent::(public|protected)(静态方法|静态变量) ===> parent永远是B self::(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::who C =>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()); // A echo get_class(B::get_static()); // B echo get_class(A::get_static()); // A

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

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

标签:静态