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 相关文章推荐
基于mysql的bbs设计(二)
Oct 09 PHP
逐步提升php框架的性能
Jan 10 PHP
PHP5中虚函数的实现方法分享
Apr 20 PHP
php入门之连接mysql数据库的一个类
Apr 21 PHP
有关phpmailer的详细介绍及使用方法
Jan 28 PHP
如何在PHP中使用正则表达式进行查找替换
Jun 13 PHP
PHP预定义变量9大超全局数组用法详解
Apr 23 PHP
PHP生成短网址方法汇总
Jul 12 PHP
Laravel最佳分割路由文件(routes.php)的方式
Aug 04 PHP
PHP实现的统计数据功能详解
Dec 06 PHP
php实现的mysqldb读写分离操作类示例
Feb 07 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
Mar 23 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 随机排序广告的实现代码
2011/05/09 PHP
总结对比php中的多种序列化
2016/08/28 PHP
PHP文件与目录操作示例
2016/12/24 PHP
thinkphp分页集成实例
2017/07/24 PHP
php微信公众号开发之简答题
2018/10/20 PHP
Laravel5.5 视图 - 创建视图和数据传递示例
2019/10/21 PHP
javascript 同时在IE和FireFox获取KeyCode的代码
2010/02/07 Javascript
基于jQuery试卷自动排版系统
2010/07/18 Javascript
js数组Array sort方法使用深入分析
2013/02/21 Javascript
解析Javascript小括号“()”的多义性
2013/12/03 Javascript
jQuery中bind与live的用法及区别小结
2014/01/27 Javascript
text-align:justify实现文本两端对齐 兼容IE
2015/08/19 Javascript
浅谈jQuery中的checkbox问题
2016/08/10 Javascript
Angular ng-class详解及实例代码
2016/09/19 Javascript
JS 验证密码 不能为空,必须含有数字、字母、特殊字符,长度在8-12位
2017/06/21 Javascript
AngularJS通过ng-Img-Crop实现头像截取的示例
2017/08/17 Javascript
vue中实现在外部调用methods的方法(推荐)
2018/02/08 Javascript
js实现限定范围拖拽的示例
2020/10/26 Javascript
Python3使用requests包抓取并保存网页源码的方法
2016/03/15 Python
Python实现Logger打印功能的方法详解
2017/09/01 Python
浅谈Pandas 排序之后索引的问题
2018/06/07 Python
Python 编程速成(推荐)
2019/04/15 Python
Python面向对象总结及类与正则表达式详解
2019/04/18 Python
python快速编写单行注释多行注释的方法
2019/07/31 Python
Django中的用户身份验证示例详解
2019/08/07 Python
tensorflow指定GPU与动态分配GPU memory设置
2020/02/03 Python
用Python生成HTML表格的方法示例
2020/03/06 Python
vue.js刷新当前页面的实例讲解
2020/12/29 Python
Pytorch之扩充tensor的操作
2021/03/04 Python
德国汉莎航空中国官网: Lufthansa中国
2017/03/30 全球购物
意大利奢侈品零售商:ilDuomo Novara
2019/09/11 全球购物
网上蛋糕店创业计划书
2014/01/24 职场文书
2014信息公开实施方案
2014/02/22 职场文书
新手上路标语
2014/06/20 职场文书
学校学雷锋活动总结
2014/06/26 职场文书
Redis基于Bitmap实现用户签到功能
2021/06/20 Redis