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&mysql(三)
Oct 09 PHP
IIS6.0+PHP5.x+MySQL5.x+Zend3.0x+GD+phpMyAdmin2.8x通用安装实例(已经完成)
Dec 06 PHP
又一个php 分页类实现代码
Dec 03 PHP
PHP 异步执行方法,模拟多线程的应用分析
Jun 03 PHP
php检测文件编码的方法示例
Apr 25 PHP
PHP+APACHE实现网址伪静态
Feb 22 PHP
学习php设计模式 php实现门面模式(Facade)
Dec 07 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
Dec 18 PHP
php实现面包屑导航例子分享
Dec 19 PHP
PHP使用curl_multi实现并发请求的方法示例
Apr 29 PHP
php解决crontab定时任务不能写入文件问题的方法分析
Sep 16 PHP
laravel框架创建授权策略实例分析
Nov 22 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
帅气的琦玉老师
2020/03/02 日漫
sony ICF-2010 拆解与改装
2021/03/02 无线电
无数据库的详细域名查询程序PHP版(1)
2006/10/09 PHP
PHP 字符串编码截取函数(兼容utf-8和gb2312)
2009/05/02 PHP
比较好用的PHP防注入漏洞过滤函数代码
2012/04/11 PHP
基于PHP异步执行的常用方式详解
2013/06/03 PHP
windows中为php安装mongodb与memcache
2015/01/06 PHP
双冒号 ::在PHP中的使用情况
2015/11/05 PHP
分享10段PHP常用代码
2015/11/11 PHP
PHPStorm+XDebug进行调试图文教程
2016/06/13 PHP
在IE和VB中支持png图片透明效果的实现方法(vb源码打包)
2011/04/01 Javascript
Extjs EditorGridPanel中ComboBox列的显示问题
2011/07/04 Javascript
JS之Date对象和获取系统当前时间详解
2014/01/13 Javascript
js调试工具console.log()方法查看js代码的执行情况
2014/08/08 Javascript
JavaScript计算两个日期时间段内日期的方法
2015/03/16 Javascript
详解React native全局变量的使用(跨组件的通信)
2017/09/07 Javascript
es6在react中的应用代码解析
2017/11/08 Javascript
详解刷新页面vuex数据不消失和不跳转页面的解决
2018/01/30 Javascript
JavaScript偏函数与柯里化实例详解
2019/03/27 Javascript
[52:10]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第二场 6.3
2018/06/04 DOTA
Python实现的概率分布运算操作示例
2017/08/14 Python
在java中如何定义一个抽象属性示例详解
2017/08/18 Python
使用Django搭建一个基金模拟交易系统教程
2019/11/18 Python
解决Tensorflow 内存泄露问题
2020/02/05 Python
解决django接口无法通过ip进行访问的问题
2020/03/27 Python
Pycharm安装Qt Design快捷工具的详细教程
2020/11/18 Python
物流合作计划书
2014/01/10 职场文书
最新创业融资计划书
2014/01/19 职场文书
大型晚会策划方案
2014/02/06 职场文书
财务人员的自我评价范文
2014/03/03 职场文书
医生党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2014流动人口计划生育工作总结
2014/12/20 职场文书
《大禹治水》教学反思
2016/02/22 职场文书
七年级作文之关于奶奶
2019/10/29 职场文书
pdf论文中python画的图Type 3 fonts字体不兼容的解决方案
2021/04/24 Python
MYSQL主从数据库同步备份配置的方法
2021/05/26 MySQL