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 相关文章推荐
mac下使用brew配置环境的步骤分享
May 23 PHP
PHP url 加密解密函数代码
Aug 26 PHP
php自动注册登录验证机制实现代码
Dec 20 PHP
超级实用的7个PHP代码片段分享
Jan 05 PHP
php模拟post行为代码总结(POST方式不是绝对安全)
Feb 22 PHP
PHP实现的英文名字全拼随机排号脚本
Jul 04 PHP
php 无限级分类 获取顶级分类ID
Mar 13 PHP
php字符串比较函数用法小结(strcmp,strcasecmp,strnatcmp及strnatcasecmp)
Jul 18 PHP
php实现连接access数据库并转txt写入的方法
Feb 08 PHP
PHP针对伪静态的注入总结【附asp与Python相关代码】
Aug 01 PHP
TP5.0框架实现无限极回复功能的方法分析
May 04 PHP
php把文件设置为插件的技巧方法
Feb 03 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 仿Comsenz安装效果代码打包提供下载
2010/05/09 PHP
PHP经典面试题之设计模式(经常遇到)
2015/10/15 PHP
PHP学习笔记之php文件操作
2016/06/03 PHP
PHP如何通过表单直接提交大文件详解
2019/01/08 PHP
Laravel实现通过blade模板引擎渲染视图
2019/10/25 PHP
如何利用PHP实现上传图片功能详解
2020/09/24 PHP
基于jquery的不规则矩形的排列实现代码
2012/04/16 Javascript
JS实现div内部的文字或图片自动循环滚动代码
2013/04/19 Javascript
JS+CSS实现仿新浪微博搜索框的方法
2015/02/24 Javascript
javascript拖拽应用实例(二)
2016/03/25 Javascript
js传值后台中文出现乱码的解决方法
2016/06/30 Javascript
基于JS实现横线提示输入验证码随验证码输入消失(js验证码的实现)
2016/10/27 Javascript
JavaScript中${pageContext.request.contextPath}取值问题及解决方案
2016/12/08 Javascript
基于Javascript倒计时效果
2016/12/22 Javascript
bootstrapValidator bootstrap-select验证不可用的解决办法
2017/01/11 Javascript
ES6实现的遍历目录函数示例
2017/04/07 Javascript
基于node.js之调试器详解
2017/08/22 Javascript
前端开发不得不知的10个最佳ES6特性
2017/08/30 Javascript
详解vue中引入stylus及报错解决方法
2017/09/22 Javascript
SVG实现时钟效果
2018/07/17 Javascript
Vue中使用matomo进行访问流量统计的实现
2019/11/05 Javascript
python实现类的静态变量用法实例
2015/05/08 Python
python制作websocket服务器实例分享
2016/11/20 Python
Python编程实现粒子群算法(PSO)详解
2017/11/13 Python
python在文本开头插入一行的实例
2018/05/02 Python
python之cv2与图像的载入、显示和保存实例
2018/12/05 Python
Python爬虫实现selenium处理iframe作用域问题
2021/01/27 Python
html5 Canvas绘制线条 closePath()实例代码
2012/05/10 HTML / CSS
HTML5页面音视频在微信和app下自动播放的实现方法
2016/10/20 HTML / CSS
家长通知书家长评语
2014/04/17 职场文书
质量安全标语
2014/06/07 职场文书
冰峪沟导游词
2015/02/09 职场文书
童年读书笔记
2015/06/26 职场文书
植树节新闻稿
2015/07/17 职场文书
解决Golang time.Parse和time.Format的时区问题
2021/04/29 Golang
Pytorch实现图像识别之数字识别(附详细注释)
2021/05/11 Python