PHP学习之抽象类和接口

来源:互联网 发布:淘宝换货单子怎么写 编辑:程序博客网 时间:2024/06/05 15:58
  1. <?php  
  2. //抽象类-可以是空类,不能创建对象,不能实例化,只能被继承  
  3. abstract class absFirst{//关键字abstract  
  4.     protected $absBl = '$absBl'//可以定义变量,关键字[public|protected|private]  
  5.     const ABSCL = 'ABS-CL';//可以定义常量  
  6.     abstract function absFunFirst($cs=array());//抽象方法关键字abstract,可以有参数,可以有默认值,没有方法体  
  7.     public function absFunSecond(){//可以定义其他成员方法,关键字[public|protected|private]  
  8.         echo "抽象类第一个方法,第一个变量是“{$this->absBl}”,第一个常量是“".self::ABSCL."”";  
  9.     }  
  10. }  
  11. //接口1-可以是空的接口-不能定义变量-不能定义其他成员方法  
  12. interface intFirst{//关键字interface  
  13.     const INTCLF = 'INT-CLF';//可以定义常量  
  14.     public function intFunFirst($ic=array());//接口方法关键字public,可以有参数,可以有默认值,没有方法体  
  15. }  
  16. //接口2  
  17. interface intSecond{  
  18.     const INTCLS = 'INT-CLS';  
  19.     public function intFunSecond();  
  20. }  
  21. //实现类-定义的抽象方法和接口需全部实现  
  22. //实现抽象类关键字extends,单一继承  
  23. //实现接口关键字implements,多接口  
  24. class claFirst extends absFirst implements intFirst,intSecond{  
  25.     //实现第一个抽象方法  
  26.     public function absFunFirst($cf='第一个抽象方法'){//关键字只能是public,参数个数需保持一致  
  27.         echo $cf."\n";  
  28.     }  
  29.     //重写抽象类中的方法  
  30.     public function absFunSecond(){  
  31.         echo '我被重写了'."\n";  
  32.     }  
  33.     //实现第一个接口的第一个方法  
  34.     public function intFunFirst($ic=',哈哈'){//关键字只能是public,参数个数需保持一致  
  35.         echo '我是第一个接口方法调的是第二接口的常量'.self::INTCLS.$ic."\n";  
  36.     }      
  37.     //实现第二个接口的第一个方法  
  38.     public function intFunSecond(){//关键字只能是public,参数个数需保持一致  
  39.         echo '我是第二个接口方法调的是第一接口的常量'.self::INTCLF."\n";  
  40.     }  
  41.       
  42. }  
  43. //使用  
  44. $cf = new claFirst();  
  45. $cf->absFunFirst();  
  46. $cf->absFunSecond();  
  47. $cf->intFunFirst();  
  48. $cf->intFunSecond();  
  49.   
  50. /* 
  51. 运行结果: 
  52. 第一个抽象方法 
  53. 我被重写了 
  54. 我是第一个接口方法调的是第二接口的常量INT-CLS,哈哈 
  55. 我是第二个接口方法调的是第一接口的常量INT-CLF 
  56. */  
  57.   
  58. /* 
  59. 总结:接口是特殊的抽象类 
  60.  
  61. 抽象类和接口相同点: 
  62. 1、都可以为空 
  63. 2、都不能创建对象,不能被实例化 
  64. 3、都可以定义常量 
  65. 4、定义的抽象方法可以有参数,可以有默认值,没有方法体 
  66. 5、实现类需实现定义的所有抽象方法,且关键字为public 
  67.  
  68. 抽象类和接口不同点: 
  69.  1、类关键字不同abstract && interface  
  70.  2、抽象类可以定义变量,接口不可以 
  71.  3、抽象类可以定义其他非抽象方法,接口不可以 
  72.  4、抽象类定义的抽象方法关键为abstract,接口定义的方法关键字为public 
  73.  5、实现抽象类只能单一继承,关键字为extends,接口可以实现多个接口,关键字为implements 
  74.  */  
  75. ?> 
0 0