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 相关文章推荐
杏林同学录(三)
Oct 09 PHP
我的论坛源代码(四)
Oct 09 PHP
php中的实现trim函数代码
Mar 19 PHP
在php MYSQL中插入当前时间
Apr 06 PHP
在字符串指定位置插入一段字符串的php代码
Feb 16 PHP
PHP数组无限分级数据的层级化处理代码
Dec 29 PHP
PHP把小数转成整数3种方法
Jun 30 PHP
推荐几款用 Sublime Text 开发 Laravel 所用到的插件
Oct 30 PHP
WordPress开发中短代码的实现及相关函数使用技巧
Jan 05 PHP
PHP mysqli事务操作常用方法分析
Jul 22 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
Dec 21 PHP
Laravel (Lumen) 解决JWT-Auth刷新token的问题
Oct 24 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实现mysql数据库备份类
2008/03/20 PHP
php checkbox 取值详细说明
2010/08/19 PHP
PHP实现事件机制的方法
2015/07/10 PHP
PHP获取redis里不存在的6位随机数应用示例【设置24小时过时】
2017/06/07 PHP
laravel如何开启跨域功能示例详解
2017/08/31 PHP
thinkphp框架使用JWTtoken的方法详解
2019/10/10 PHP
一个js写的日历(代码部分网摘)
2009/09/20 Javascript
写了10年的Javascript也未必全了解的连续赋值运算
2011/03/25 Javascript
Prototype源码浅析 Enumerable部分(二)
2012/01/18 Javascript
web的各种前端打印方法之jquery打印插件PrintArea实现网页打印
2013/01/09 Javascript
第四章之BootStrap表单与图片
2016/04/25 Javascript
jQuery Mobile动态刷新页面样式的实现方法
2016/05/28 Javascript
Jquery组件easyUi实现表单验证示例
2016/08/23 Javascript
详解JS去重及字符串奇数位小写转大写
2016/12/29 Javascript
JavaScript实现的浏览器下载文件的方法
2017/08/09 Javascript
vue 循环加载数据并获取第一条记录的方法
2018/09/26 Javascript
Vue封装全局过滤器Filters的步骤
2020/09/16 Javascript
nginx配置域名后的二级目录访问不同项目的配置操作
2020/11/06 Javascript
从零学python系列之新版本导入httplib模块报ImportError解决方案
2014/05/23 Python
Python中的元类编程入门指引
2015/04/15 Python
python 识别图片中的文字信息方法
2018/05/10 Python
修改 CentOS 6.x 上默认Python的方法
2019/09/06 Python
python实现引用其他路径包里面的模块
2020/03/09 Python
名人珠宝设计师:Melinda Maria Jewelry
2019/03/06 全球购物
世界上最大的艺术社区:SAA
2020/12/30 全球购物
100%法国制造的游戏和玩具:Les Jouets Français
2021/03/02 全球购物
廉政教育心得体会
2014/01/01 职场文书
学生感冒英文请假条
2014/02/04 职场文书
廉洁使者实施方案
2014/03/29 职场文书
寄语学生的话
2014/04/10 职场文书
创先争优活动心得体会
2014/09/04 职场文书
幼儿园个人总结
2015/02/28 职场文书
学习雷锋精神倡议书
2015/04/27 职场文书
如何写好竞聘报告
2019/04/03 职场文书
MySQL之高可用集群部署及故障切换实现
2021/04/22 MySQL
python中pymysql包操作数据库方法
2022/04/19 Python