当前位置:首页 > PHP教程 > php面向对象 > 列表

php中接口、抽象类、Final、Static例子

发布:smiling 来源: PHP粉丝网  添加日期:2016-07-27 13:01:43 浏览: 评论:0 

在php中接口抽象类、Final、Static几个我们用到的相当的简单特别是大型网站架构时都会有用到了,今天我们来看一篇关于php中抽象类、Final、Static的例子。

1. 接口

(1)对接口的使用是通过关键字implements

(2)接口不能定义成员变量(包括类静态变量),能定义常量

(3)子类必须实现接口定义的所有方法

(4)接口只能定义不能实现该方法

(5)接口没有构造函数

(6)接口中的方法和实现它的类默认都是public类型的

2. 抽象类

(1)对抽象类的使用是通过关键字extends

(2)不能被实例化,可以定义子类必须实现的方法

(3)子类必须定义父类中的所有抽象方法,这些方法的访问控制必须和父类中一样(或者更为宽松)

(4)如一个类中有一个抽象方法,则该类必须定义为抽象类

(5)抽象类可以有构造函数

(6)抽象类中的方法可以使用private,protected,public来修饰。

(7)一个类可以同时实现多个接口,但一个类只能继承于一个抽象类。

3. Final类/方法

(1)final类不能被继承

(2)final方法不能被重写

4. Static类/方法

(1)可以不实例化类而直接访问

(2)静态属性不可以由对象通过->操作符来访问,用::方式调用

例子:

  1. <?php 
  2. # 接口 
  3. interface Human{ 
  4.     const TEST_CONST = "test const"// 定义常量 
  5.     // public $v; // error,不能定义变量 
  6.     // static $count; // error,不能定义变量 
  7.     public function speak(); 
  8.     public function walk(); 
  9.     public function run(); 
  10.      
  11. # 抽象类 
  12. abstract class Father implements Human{ 
  13.      
  14.     public function __construct(){ 
  15.         echo "father init n"
  16.     } 
  17.      
  18.     abstract public function walk(); // 抽象方法 
  19.      
  20.     public function speak(){ 
  21.         echo "father speak skill n"
  22.     } 
  23.      
  24.     public function run(){ 
  25.         echo "father run skill n"
  26.     } 
  27.      
  28. # 非抽象类 
  29. class Mother implements Human{ 
  30.      
  31.     public function __construct(){ 
  32.         echo "mother init n"
  33.     } 
  34.      
  35.     # 这里必须实现walk方法 
  36.     public function walk(){ 
  37.         echo "mother walk skill n"
  38.     } 
  39.      
  40.     public function speak(){ 
  41.         echo "mother speak skill n"
  42.     } 
  43.      
  44.     public function run(){ 
  45.         echo "mother run skill n"
  46.     } 
  47.      
  48. class Son extends Father{ 
  49.      
  50.     public function walk(){ 
  51.         echo "son walk skill. n"
  52.     } 
  53.      
  54.     public function speak($name = ''){ 
  55.         echo "son: "$name ." speak skill. n"
  56.     } 
  57.      
  58.     # 访问控制必须和父类中一样(或者更为宽松) 
  59.     protected function sport(){ 
  60.         echo "son sport skill. n"
  61.     } 
  62.      
  63.     final public function notTeach(){ 
  64.         echo 'son has not to teach skill'
  65.     } 
  66.      
  67. class Daughter extends Mother{ 
  68.      
  69.     public function run($name = ''){ 
  70.         echo "daughter run skill. n"
  71.     } 
  72.      
  73.      
  74. final class GrandChild extends Son{ 
  75.          
  76.     # 访问控制必须和父类中一样(或者更为宽松) 
  77.     public function sport(){ 
  78.         echo "GrandChild sport skill. n"
  79.     } 
  80.      
  81.     # Cannot override final method Son::notTeach() 
  82.     // public function notTeach(){} // error 
  83. //phpfensi.com 
  84.      
  85. #  Class Orphan may not inherit from final class (GrandChild) 
  86. // class Orphan extends GrandChild{}  // error 
  87.      
  88. $son = new Son(); 
  89. $son->speak("Suly"); 
  90.      
  91. $daughter = new Daughter(); 
  92. $daughter->run('Lily'); 
  93.      
  94. $grandChild = new GrandChild(); 
  95. $grandChild->sport(); 

抽象类和接口的区别:

1、对接口的使用是通过关键字implements。对抽象类的使用是通过关键字extends。当然接口也可以通过关键字extends继承。

2、接口中不可以声明成员变量(包括类静态变量),但是可以声明类常量。抽象类中可以声明各种类型成员变量,实现数据的封装。(另JAVA接口中的成员变量都要声明为public static final类型)

3、接口没有构造函数,抽象类可以有构造函数。
4、接口中的方法默认都是public类型的,而抽象类中的方法可以使用private,protected,public来修饰。

5、一个类可以同时实现多个接口,但一个类只能继承于一个抽象类。

抽象类还是接口。

如果要创建一个模型,这个模型将由一些紧密相关的对象采用,就可以使用抽象类。如果要创建将由一些不相关对象采用的功能,就使用接口。

如果必须从多个来源继承行为,就使用接口。

如果知道所有类都会共享一个公共的行为实现,就使用抽象类,并在其中实现该行为。

Tags: php接口 php抽象类 Final Static

分享到: