首页 > 语言 > PHP > 正文

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

2024-09-04 11:43:49
字体:大 中 小
来源:转载
供稿:网友

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

抽象类和接口的区别:

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

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

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

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

抽象类还是接口。

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

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

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表