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 相关文章推荐
检测png图片是否完整的php代码
Sep 06 PHP
IIS7.X配置PHP运行环境小结
Jun 09 PHP
深入PHP5中的魔术方法详解
Jun 17 PHP
php使用base64加密解密图片示例分享
Jan 20 PHP
PHP jQuery表单,带验证具体实现方法
Feb 15 PHP
开源php中文分词系统SCWS安装和使用实例
Apr 11 PHP
php sybase_fetch_array使用方法
Apr 15 PHP
php中实现可以返回多个值的函数实例
Mar 21 PHP
如何解决phpmyadmin导入数据库文件最大限制2048KB
Oct 09 PHP
php二维码生成以及下载实现
Sep 28 PHP
laravel中短信发送验证码的实现方法
Apr 25 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
Jun 16 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
Oracle Faq(Oracle的版本)
2006/10/09 PHP
阿里云的WindowsServer2016上部署php+apache
2018/07/17 PHP
使用JavaScript获取地址栏参数的方法
2014/12/19 Javascript
JavaScript数组Array对象增加和删除元素方法总结
2015/01/20 Javascript
JavaScript判断FileUpload控件上传文件类型
2015/09/28 Javascript
node.js 中国天气预报 简单实现
2016/06/06 Javascript
Google 地图API资料整理及详细介绍
2016/08/06 Javascript
详解Vue中添加过渡效果
2017/03/20 Javascript
js canvas实现擦除效果示例代码
2017/04/26 Javascript
es6在react中的应用代码解析
2017/11/08 Javascript
Vue.js 点击按钮显示/隐藏内容的实例代码
2018/02/08 Javascript
解决Webpack 热部署检测不到文件变化的问题
2018/02/22 Javascript
垃圾回收器的相关知识点总结
2018/05/13 Javascript
JS字典Dictionary类定义与用法示例
2019/02/01 Javascript
重学JS之显示强制类型转换详解
2019/06/30 Javascript
vue 使用 v-model 双向绑定父子组件的值遇见的问题及解决方案
2021/03/01 Vue.js
[01:04:49]KG vs LGD 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python中Threading用法详解
2017/12/27 Python
python opencv minAreaRect 生成最小外接矩形的方法
2019/07/01 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
2020/06/02 Python
python中rc1什么意思
2020/06/19 Python
美国购买韩国护肤和美容产品网站:Althea Korea
2020/11/16 全球购物
Linux文件系统类型
2012/02/15 面试题
资产评估专业学生的自我鉴定
2013/11/14 职场文书
毕业生找工作的求职信范文
2013/12/24 职场文书
会计专业毕业生求职信分享
2014/01/03 职场文书
大二学期个人自我评价
2014/01/13 职场文书
安全检查与奖惩制度
2014/01/23 职场文书
数控专业个人求职信范文
2014/02/05 职场文书
房地产财务部员工岗位职责
2014/03/12 职场文书
档案保密承诺书
2014/06/03 职场文书
高考标语大全
2014/06/05 职场文书
职业生涯规划书怎么写?
2014/09/14 职场文书
法定授权委托证明书
2014/09/27 职场文书
2016应届大学生自荐信模板
2016/01/28 职场文书
如何使用PyCharm及常用配置详解
2021/06/03 Python