这篇文章主要讲解了“PHP中抽象,最终和静态原理与用法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP中抽象,最终和静态原理与用法”吧!
本文实例讲述了PHP中抽象(抽象),最后(最终)和静态(静态)原理与用法。分享给大家供大家参考,具体如下:
文摘(抽象)
PHP 5支持抽象类和抽象方法。定义为抽象的类不能被实例化。任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。被定义为抽象的方法只是声明了其调用方式(参数),<强>不能定义其具体的功能实现强>。
引用><强>继承一个抽象类的时候,子类必须定义父类中的所有抽象方法>强;另外,<强>这些方法的访问控制必须和父类中一样(或者更为宽松)>强。例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的(严格程度:private> protected>公共),而不能定义为私有的。此外<强>方法的调用方式必须匹配,即类型和所需参数数量必须一致>强。例如,子类定义了一个可选参数,而父类抽象方法的声明里没有,则两者的声明并无冲突。这也适用于PHP 5.4起的构造函数。在PHP 5.4之前的构造函数声明可以不一样的。
引用>总结:
<李>
抽象类不能被实例化;
李> <李>类中有任何抽象方法那这个类也必须为抽象的;
李> <李>抽象类只能申明调用方式和参数,不能定义具体功能实现;
李> <李>继承抽象类的子类必须实现抽象类的所有抽象方法;
李> <李>子类中实现的抽象方法的访问控制必须比父类的访问控制更严格;
李> <李>子类中实现的方法的调用方式及参数数量必须与被实现的方法一致。
李>例:
& lt; PHP ? abstract class  AbstractClass {//才能,强制要求子类定义这些方法,不定义功能实现 abstract 才能protected function  getValue (); abstract 才能protected function  prefixValue($前缀);//才能,普通方法(非抽象方法),子类可以不重写 public 才能;function 打印(),{ ,,,print $ this→getValue(),只“\ n"; ,,} } class ConcreteClass1  extends AbstractClass { protected 才能;function  getValue (), { ,,,return “ConcreteClass1"; ,,} public 才能;function  prefixValue($前缀),{ ,,,return “{$前缀}ConcreteClass1"; ,,} } class ConcreteClass2  extends AbstractClass { ,//访问方式可以更宽松 public 才能;function  getValue (), { ,,,return “ConcreteClass2"; ,,} public 才能;function  prefixValue($前缀),{ ,,,return “{$前缀}ConcreteClass2"; ,,} } $ class1 =, new ConcreteClass1; 美元class1→打印(); echo class1→美元prefixValue (& # 39; FOO_& # 39;),干净\ n"; $ class2 =, new ConcreteClass2; 美元class2→打印(); echo class2→美元prefixValue (& # 39; FOO_& # 39;),干净\ n"; ?在& lt; php ? abstract class  AbstractClass {//才能,我们的抽象方法仅需要定义需要的参数 abstract 才能protected function  prefixName($名称); } class ConcreteClass  extends AbstractClass {//才能,我们的子类可以定义父类签名中不存在的,可选参数 public 才能;function  prefixName(名称、美元,美元separator =,“干净),{ ,,,if (name 美元;==,“Pacman"), { ,,,,,prefix 美元;=,“Mr"; ,,,},elseif (name 美元;==,“Pacwoman"), { ,,,,,prefix 美元;=,“Mrs"; ,,,},{else ,,,,,prefix 美元;=,““ ,,,} ,,,return “{$前缀}{$分离器},{$名称}“; ,,} } $ class =, new ConcreteClass; echo 类→美元prefixName (“Pacman"),“\ n"; echo 类→美元prefixName (“Pacwoman"),“\ n"; ?在最后
如果父类中的方法被声明为决赛,则子类无法覆盖该方法。如果一个类被声明为决赛,则不能被继承。
引用>这个比较好理解,不做赘述
静态
PHP中抽象,最终和静态原理与用法