php抽象类和接口知识点整理总结


Posted in PHP onAugust 02, 2019

本文实例总结了php抽象类和接口相关知识点。分享给大家供大家参考,具体如下:

抽象类(一种抽象的类)

一、什么是抽象方法?

定义:一个方法如果没有方法体(一个方法,不使用{},直接使用分号结束的方法,才是没有方法体的方法),则这个方法就是抽象方法。

class Person{
  abstract function say(); 没有方法体的 、使用abstract 关键字修饰
  abstract function say(){ 这个不是、有方法体{},
};
}

总结 1.声明一个方法不使用{},而直接分号结束。2.如果是抽象方法,必须使用abstract(抽象 关键字来修饰)。

二、什么是抽象类呢?

1.如果一个类中有一个方法是抽象的方法,这个类就是抽象类。

2.如果声明一个抽象类,则这个类必须要使用abstract 关键字来修饰。

abstract class Person{
  public $name;
  abstract function say();
  abstract function eat();
}

注意

1.只要使用abstract 来修饰的类,就是抽象类。

2.抽象类是一个特殊的类,特殊在哪里(在抽象类中可以有抽象方法)。

3.除了在抽象类中可以有抽象方法以外,和正常的类完全一样。

注意2

1. 抽象类不能实例化对象(不能创建出对象)。

$p=new Person(); //报错

2. 如果看见抽象类,就必须写这个类的子类,将抽象类中的抽象方法覆盖(加上方法体)。

class student extend Person()
{
 function say(){  // 只覆盖了父类的一个
}
}

3. 子类必须全部实现(覆盖重写)抽象方法,这个子类才能创建对象,如果实现部分,那么还有抽象方法,他还是抽象类。

class student extend Person()
{
 function say(){  // 只覆盖了父类的一个
}
}

抽象方法作用

1. 抽象方法就是一个规定,规定子类必须有这个方法的实现,功能交给子类实现。

只写出来结构,没有实现,实现交给具体的子类(按自己功能实现)。

class student extend Person()
{
 function say(){
}
// 覆盖了父类两个抽象方法
function eat(){
}
}

抽象类作用

就是要求子类的结构,所以抽象类就是一个规范。(只有形)

接口 (接口是一种特殊抽象类,接口也是一种特殊的类 )

接口和抽象类的相同点

1.抽象类和接口都有抽象方法。

2.抽象类和接口不能创建实例对象。

3.抽象类和接口使用意义相同。定义一种规范。

不同点

1.接口中的方法必须全要是抽象方法(不能用不抽象的方法),所以在接口的所有方法中不使用abstract,直接使用 分号结束。

2.接口中的成员属性,必须是常量(不能有变量)。

3.接口所有权限必须是公有的 public

4.声明接口 不使用class 使用 interface ,

interface Person{
 public $name; //不能声明变量 报错
  const NAME='tom'// 可以声明常量
 function test();  //因为接口中全部是抽象方法 所以 省去 abstract 。
 function test1();
Protect function test3() 报错 只可以是 public
}
$re=new Person; //报错 不可以 创建实例化 对象 。
echo Person:: NAME; 输出常量。

接口应用的一些细节

1. 可以使用 extends,让一个接口继承另一个接口(接口和接口的关系---只有扩展抽象方法,没有覆盖关系)。

2. 可以使用一个类,来实现接口中的全部方法,也可也使用一个抽象类,来实现接口的部分方法。(类与接口  或者 抽象类 与接口,有覆盖的关系,---重写---实现接口中的抽象方法)

interface Demo{
  const NAME='tom';
 public function test();
 public function test1();
}
interface test extends Demo{ //接口对接口 只有扩展
 function test2();
}

3.只要在子类中有覆盖的动作,就不要使用extends(继承 扩展)这个关键字,使用implements 实现。

interface Demo{
  const NAME='tom';
 public function test();
 public function test1();
}
interface test extends Demo{ //接口对接口 只有扩展
 function test2();
}
class Hello extends test{} // 报错 // 类对接口 有覆盖
abstract class Hello implements test{
} //不报错

4.一个类可以在继承另一个类的同时,使用implements 实现接口(可以实现多个接口)(一定要先继承,在实现接口)。

interface Demo{
  const NAME='tom';
  public function test();
public function test1();
}
interface test extends Demo{ //接口对接口 只有扩展
 function test2();
}
Class Word{
Function test5(){
}
}
 class Hello extends Word implements test{
//可以使用接口
function test(){
}
function test1(){
}
//实现接口
function test2(){
}
//function test5(){
}
}

5.实现多个接口,只需使用逗号分开即可。

php 中一个类 只要一个父类 。

interface Demo{
  const NAME='tom';
 function test1();
}
interface Test extends Demo{
 function test2();
}
class World{
 function test3();
}
interface Abc{
function test6{}
}
class Hello extends World implements Test,Abc{
 function test1(){
};
 function test2(){
echo 11;
};
 function test3(){
};
 function test6(){
};
}
$re=new Hello;
$re->test2(); //输出 11

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
全世界最小的php网页木马一枚 附PHP木马的防范方法
Oct 09 PHP
php 获取全局变量的代码
Apr 21 PHP
php获取服务器信息的实现代码
Feb 04 PHP
php MessagePack介绍
Oct 06 PHP
模板引擎smarty工作原理以及使用示例
May 25 PHP
thinkphp学习笔记之多表查询
Jul 28 PHP
thinkphp实现like模糊查询实例
Oct 29 PHP
PHP的拦截器实例分析
Nov 03 PHP
php格式化电话号码的方法
Apr 24 PHP
基于CI(CodeIgniter)框架实现购物车功能的方法
Apr 09 PHP
php如何计算两坐标点之间的距离
Dec 29 PHP
PHP的JSON封装、转变及输出操作示例
Sep 27 PHP
使用composer 安装 laravel框架的方法图文详解
Aug 02 #PHP
php菜单/评论数据递归分级算法的实现方法
Aug 01 #PHP
PHP实现微信提现(企业付款到零钱)
Aug 01 #PHP
php curl发送请求实例方法
Aug 01 #PHP
php layui实现前端多图上传实例
Jul 30 #PHP
安装docker和docker-compose实例详解
Jul 30 #PHP
docker-compose部署php项目实例详解
Jul 30 #PHP
You might like
php根据年月获取季度的方法
2014/03/31 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
2014/06/13 PHP
简单理解PHP的面向对象编程方式
2016/05/17 PHP
[原创]php常用字符串输出方法分析(echo,print,printf及sprintf)
2016/07/09 PHP
PHP SFTP实现上传下载功能
2017/07/26 PHP
js限制textarea每行输入字符串长度的代码
2012/10/31 Javascript
js计算字符串长度包含的中文是utf8格式
2013/10/15 Javascript
Jquery节点遍历next与nextAll方法使用示例
2014/07/22 Javascript
Bootstrap3制作图片轮播效果
2016/05/12 Javascript
详解Angular6学习笔记之主从组件
2018/09/05 Javascript
基于jQuery的时间戳与日期间的转化
2019/06/21 jQuery
jquery获取并修改触发事件的DOM元素示例【基于target 属性】
2019/10/10 jQuery
微信小程序swiper左右扩展各显示一半代码实例
2019/12/05 Javascript
如何基于layui的laytpl实现数据绑定的示例代码
2020/04/10 Javascript
javascript读取本地文件和目录方法详解
2020/08/06 Javascript
vue.js click点击事件获取当前元素对象的操作
2020/08/07 Javascript
快速了解python leveldb
2018/01/18 Python
django的ORM操作 删除和编辑实现详解
2019/07/24 Python
html5 datalist标签使用示例(自动完成组件)
2014/05/04 HTML / CSS
html5表单及新增的改良元素详解
2016/06/07 HTML / CSS
捷克体育用品购物网站:D-sport
2017/12/28 全球购物
HelloFresh奥地利:立即订购烹饪盒
2019/02/22 全球购物
ETO男装官方网店:ETO Jeans
2019/02/28 全球购物
莫斯科大型旅游休闲商品超市:Camping.ru
2020/09/16 全球购物
Python里面如何拷贝一个对象
2014/02/17 面试题
劳资员岗位职责
2013/11/11 职场文书
小学生期末自我鉴定
2014/01/19 职场文书
安全生产汇报材料
2014/02/17 职场文书
伦敦奥运会口号
2014/06/13 职场文书
运动会标语
2014/06/21 职场文书
美术社团活动总结
2014/06/27 职场文书
基层党组织整改方案
2014/10/25 职场文书
销售员态度差检讨书
2014/10/26 职场文书
委托证明范本
2014/11/25 职场文书
何时使用Map来代替普通的JS对象
2021/04/29 Javascript
Python数据可视化之绘制柱状图和条形图
2021/05/25 Python