PHP中如何形成static::与new static()的静态绑定
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()的静态绑定的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。

PHPLate静态绑定:突破传统编程思维的技术窍门引言:传统的编程思维方式通常是在编译时就确定方法和属性的调用,但是在一些需要动态调用的情况下,这种方式就显得束缚和不灵活了。PHP中提供了一个强大的特性,即"Late静态绑定"(Latestaticbinding),它打破了传统的编程思维,为动态绑定方法和属性提供了便利。本文通过具体的代码示例,介绍了L

是的!当编译器知道要用于方法执行的对象时,它可以静态地将引用绑定到对象。例如,静态变量、私有变量和final变量使用静态绑定。而如果需要在运行时进行对象识别,则使用动态绑定。方法重写是动态绑定的一种情况。而方法重载是静态绑定的一种情况。

通过PHPLate静态绑定,打造高效可扩展的代码结构摘要:在大型项目中,代码结构的可扩展性和高效性是非常重要的。PHPLate静态绑定是一种强大的特性,可以帮助我们构建易于维护和扩展的代码。本文将介绍PHPLate静态绑定的概念,并通过具体的代码示例来说明如何使用它来构建高效可扩展的代码结构。引言:随着企业的业务不断发展壮大,项目规模也逐渐增长。在这样

如何使用PHPLate静态绑定提高代码的重用性引言:在PHP开发中,重用代码是提高开发效率和维护性的关键因素之一。PHP提供了多种技术来实现代码的重用性,其中一种重要的技术是使用Late静态绑定。本文将介绍Late静态绑定的概念、优势以及如何在实际开发中应用。一、Late静态绑定概述Late静态绑定是指根据调用时上下文动态地确定静态方法或属性的调用方式。在

解锁PHPLate静态绑定的技术奥秘,需要具体代码示例近年来,PHP作为一种常用的服务器端脚本语言,受到了广大开发者的欢迎。随着PHP语言的发展,越来越多的编程技巧和特性被加入到了PHP中,其中之一就是Late静态绑定。Late静态绑定是指在继承关系中,子类能够重写和调用父类的静态方法和属性。这种继承关系可以很大程度上提高代码的灵活性和可扩展性。那么,让我

绑定是一种在方法调用和方法实际实现之间创建链接的机制。根据Java中的多态性概念,对象可以有许多不同的形式。对象形式可以在编译时和运行时解析。如果方法调用和方法实现之间的链接在编译时解析,则我们将其称为静态绑定;如果在运行时解析,则将其称为动态绑定。动态绑定使用对象来解析绑定,而静态绑定使用类和字段的类型。老先生。否。键静态绑定动态绑定1基本在编译时解析在运行时解决2解析机制 静态绑定使用类和字段的类型动态绑定使用对象来解析绑定3示例重载是静态绑定的示例方法重写是动态绑定的示例4.方法类型私有、

PHPLate静态绑定:优化代码继承的技术利器背景介绍:在面向对象编程中,继承是一种常见的代码重用技术。通过继承,我们可以创建一个新的类,并从现有的类(称为父类或基类)继承属性和方法。这样,我们可以减少代码重复,提高代码的可维护性和扩展性。然而,在继承中,经常会遇到一个问题:在子类中调用父类的静态方法时,由于静态方法绑定是在编译时完成的,导致子类调用静态方
