基础知识1、范围解析操作符(::)可以用来访问静态成员、类常量,也可以用来重写类中的属性和方法。三个特殊关键字self、parent和static用于访问类定义中的属性或方法。parent用于调用父类中重写的属性或方法(出现的地方会解析到对应类的父类)。self用于调用本类中的方法或属性(它出现的地方会被解析到对应的类;注意它和$this不同,$this指向当前实例化的对象)。当子类重写其父类中的方法时,PHP不会调用父类中被重写的方法。是否调用父类的方法由子类决定。2、PHP内核把类的继承实现放在“编译阶段”运算符访问静态属性。f)以静态方式调用非静态方法会导致E_STRICT级别的错误。g)与所有其他PHP静态变量一样,静态属性只能初始化为文字或常量,不能初始化为表达式。所以一个静态属性可以初始化为一个整数或一个数组,但不能初始化为另一个变量或函数的返回值,也不能指向一个对象。---------------------------------------------->a。静态方法示例(出现位置:类的方法定义)-------------------------------------------->b。静态属性示例(出现位置:类的属性定义)staticValue()。"\n";打印$foo->my_static。"\n";//未定义的“属性”my_staticprint$foo::$my_static."\n";$classname='Foo';print$classname::$my_static。"\n";//从PHP5.3.0开始打印Bar::$my_static。"\n";$bar=newBar();print$bar->fooStatic()。"\n";?>----------------------------------------->c。用于后期静态绑定(出现位置:在类的方法中,用于修饰变量或方法)下面详细分析后期静态绑定(latestaticbinding)从PHP5.3.0开始,PHP增加了一个叫做latestatic的函数binding,用于引用继承范围内静态调用的类1.转发调用和非转发调用转发调用:指静态调用有以下几种方式:,parent::,static::andforward_static_call().非转发调用:显式指定类名的静态调用(如Foo::foo())非静态调用(如$foo->foo())2.后期静态绑定如何工作:存储在前面"notClassnamein"non-forwardingcall"。意思是当我们调用一个forwardedcall的staticcall时,实际调用的class是之前的non-forwardingcall的class。实例分析:selfname()。"\n";echo$apple->parentname()。"\n";echo$apple->staticname();?>运行结果:MangoOrangeAppleb)使用forward_static_call()运行结果:OrangeisOrangeisOrangeismyfavoritefruitApplei这是我父亲最喜欢的水果c)useget_called_class()运行结果:前面提到MangoOrange应用,引入后期静态绑定的目的是引用静态调用的类在传承范围内。因此,可以使用后期静态绑定的方法解决单例继承问题。首先,让我们看看使用self是什么感觉:
