PHP abstract抽象类和interface接口的用法(附带实例)
在实际开发过程中,有些类并不需要被实例化,有一些父类主要是让子类来继承,这样可以提高代码复用性。
PHP 抽象类的语法结构如下:
【实例】抽象类。
PHP 程序中使用抽象类,要注意以下事项:
1) 如果一个类使用 abstract 来修饰,则该类就是一个抽象类。如果一个方法被 abstract 修饰,那么该方法就是一个抽象方法,抽象方法不能有方法体“=> abstract function cry()”,也不可以有 {}。
2) 抽象类一定不能被实例化。抽象类可以没有抽象方法,但是如果一个类包含了任意一个抽象方法,这个类一定要被声明为 abstract 类。
3) 如果一个类继承了另一个抽象类,则该子类必须实现抽象类中的所有抽象方法(除非它自己也被声明为抽象类)。
interface接口的语法结构如下:
实现接口的代码如下:
【实例】接口的应用。
PHP 程序中使用接口,要注意以下事项:
1) 接口不能被实例化,接口中所有的方法都不能有方法体。
2) 一个类可以实现多个接口,以逗号(“,”)分隔,例如“class demo implements if1,if2,if3{}”。
3) 接口中可以有属性,但该属性必须是常量。常量不可以有修饰符(默认为 public 修饰符),例如以下代码:
4) 接口中的方法必须为 public 修饰符。
5) 一个接口不能继承其他类,但是可以继承其他接口。一个接口可以继承多个其他接口,例如以下代码:
6) 一个类可以在继承父类的同时实现其他接口,例如以下代码:
PHP 类的继承是单一继承,即一个类只能继承一个父类,这对子类功能的扩展有一定的影响。可以把实现接口看作对继承类的补充。继承是层级的关系,不太灵活;而实现接口是平级的关系,可以在不打破继承关系的前提下对某个功能进行扩展,非常灵活。
PHP 抽象类的语法结构如下:
abstract class classname{
property $name;
method(){} // 方法也可以用abstract修饰符
function方法名(){}
}
【实例】抽象类。
<?php
abstract class animal{
public $name;
public $age;
//抽象方法不能有方法体,主要是为了让子类去实现
abstract public function cry();
//抽象类可以包含抽象方法,也可以包含实例类方法
public function getname(){
echo $this->name;
}
}
class Cat{
public function cry(){
echo 'ok';
}
}
?>
“动物类”实际上是一个抽象的概念,它规定了某种动物的共有属性,但各动物之间又不完全相同。此外,还有交通工具类、植物类等。PHP 程序中使用抽象类,要注意以下事项:
1) 如果一个类使用 abstract 来修饰,则该类就是一个抽象类。如果一个方法被 abstract 修饰,那么该方法就是一个抽象方法,抽象方法不能有方法体“=> abstract function cry()”,也不可以有 {}。
2) 抽象类一定不能被实例化。抽象类可以没有抽象方法,但是如果一个类包含了任意一个抽象方法,这个类一定要被声明为 abstract 类。
3) 如果一个类继承了另一个抽象类,则该子类必须实现抽象类中的所有抽象方法(除非它自己也被声明为抽象类)。
PHP interface接口
接口就是将一些没有实现的方法封装在一起,要使用某个类的时候,再根据具体情况编写这些方法。interface接口的语法结构如下:
interface 接口名{
//属性、方法
//接口中的方法都不能有方法体
}
实现接口的代码如下:
class 类名 implements 接口名{
}
接口是更加抽象的抽象类,抽象类中的方法可以有方法体,但是接口中的方法不能有方法体。接口采用了程序设计的多态和高内聚、低耦合的设计思想。【实例】接口的应用。
<?php
interface iUsb{
public function start();
public function stop();
}
//编写相机类,让它去实现接口
//当一个类实现了某个接口,那么该类就必须实现接口的所有方法
class Camera implements iUsb{
public function start(){
echo 'Camera starts work'.'<br>';
}
public function stop(){
echo 'Camera stops work';
}
}
//编写一个手机类
class Phone implements iUsb{
public function start(){
echo 'Phone starts work'.'<br>';
}
public function stop(){
echo 'Phone stops work';
}
}
$c=new Camera();
$c->start();
$p=new Phone();
$p->start();
?>
运行结果为:
Phone starts work
Phone starts work
PHP 程序中使用接口,要注意以下事项:
1) 接口不能被实例化,接口中所有的方法都不能有方法体。
2) 一个类可以实现多个接口,以逗号(“,”)分隔,例如“class demo implements if1,if2,if3{}”。
3) 接口中可以有属性,但该属性必须是常量。常量不可以有修饰符(默认为 public 修饰符),例如以下代码:
interface iUsb{
const A=90;
}
echo iUsb::A;
4) 接口中的方法必须为 public 修饰符。
5) 一个接口不能继承其他类,但是可以继承其他接口。一个接口可以继承多个其他接口,例如以下代码:
interface 接口名 extends if1,if2{}
6) 一个类可以在继承父类的同时实现其他接口,例如以下代码:
class test extends testbase implements test1,test2{}
PHP 类的继承是单一继承,即一个类只能继承一个父类,这对子类功能的扩展有一定的影响。可以把实现接口看作对继承类的补充。继承是层级的关系,不太灵活;而实现接口是平级的关系,可以在不打破继承关系的前提下对某个功能进行扩展,非常灵活。
ICP备案:
公安联网备案: