PHP接口抽象类对象类各自定义
Posted @Kerry~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP接口抽象类对象类各自定义相关的知识,希望对你有一定的参考价值。
最近发现远离了基础,工作之余重新整理一遍关于php的基础知识,重新梳理一下,以便加强运用。
接口
接口的特点:
- 对接口的定义是关键字 interface
- 对接口的使用是通过关键字implements,多个采用逗号相隔
- 接口不能定义成员变量(包括类静态变量),只能定义常量
- 子类必须实现接口定义的所有方法
- 接口只能定义不能实现该方法,对方法(行为)进行抽象
- 接口没有构造函数
- 接口中的方法和实现它的类默认都是public类型的
- 不能实例化
永远记住一个特点:接口是定义行为规范(意思就是子类必须按照它的规则重写所有的方法)
下面分为两种继承方式
- 非抽象类继承
// 定义接口 A interface A { // 特点一:只能定义常量 // public $a = '1234'; error const TEST_CONST ="567"; // 特点二:接口里面的所有方法都是public 公共 并且只能定义不能实现 public function speak(); public function walk(); public function run(); //特点四:方法只能定义不能实现 // public function tools() // { // echo 1; error // } }
// 继承接口A class Info implements A { public $a = '1234'; public function __construct() { $this->a = "789"; } public function speak() { echo ‘重写方法’; } public function walk() { echo '必须重写接口的walk方法'; } public function run() { echo '必须重写接口的run方法'; } }
- 抽象类继承
abstract class Father implements A
{
// 公共行为
abstract public function fly(); // 抽象方法
abstract public function walk(); // 抽象方法
// 当抽象类重写了接口方法时候,那么继承抽象类的子类可以不需要重写接口方法了
public function speak(){
echo "father speak skill n";
}
abstract protected function jums();
// 重写接口方法
public function error()
{
echo '继承属性';
}
}
抽象类
特点:
- 抽象类定义使用关键字:abstract
- 子类继承使用关键字:extends
- 子类必须定义父类中的所有抽象方法,这些方法的访问控制必须和父类中一样(或者更为宽松),抽象方法只定义,不实现。
- 不能实例化,可以定义子类必须实现的抽象方法(只有定义为抽象方法才必须实现的)
- 如一个类中有一个抽象方法,则该类必须定义为抽象类,则这个类必须声明为:abstract
- 抽象类可以有构造函数
- 抽象类中的方法可以使用private,protected,public来修饰。
- 一个类可以同时实现多个接口,但一个类只能继承于一个抽象类。
抽象类和接口的区别
- 对接口的使用是通过关键字implements。对抽象类的使用是通过关键字extends。
- 接口定义使用 interface,抽象类定义使用 abstract
- 接口中不可以声明成员变量(包括类静态变量),但是可以声明类常量。抽象类中可以声明各种类型成员变量,实现数据的封装。(可以声明为public static final类型)
- 接口没有构造函数,抽象类可以有构造函数。
-
接口中的方法默认都是public类型的,而抽象类中的方法可以使用private,protected,public来修饰。
-
一个类可以同时实现多个接口,但一个类只能继承于一个抽象类。
抽象类还是接口
如果要创建一个模型,这个模型将由一些紧密相关的对象采用,就可以使用抽象类。如果要创建将由一些不相关对象采用的功能,就使用接口。
如果必须从多个来源继承行为,就使用接口。
如果知道所有类都会共享一个公共的行为实现,就使用抽象类,并在其中实现该行为。
以上是关于PHP接口抽象类对象类各自定义的主要内容,如果未能解决你的问题,请参考以下文章