PHP中抽象,最终和静态原理与用法

  介绍

这篇文章主要讲解了“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中抽象,最终和静态原理与用法