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中$_SERVER的详细参数与说明
Jul 29 PHP
frename PHP 灵活文件命名函数 frename
Sep 09 PHP
PHP 调试工具Debug Tools
Apr 30 PHP
PHP常用特殊运算符号和函数总结(php新手入门必看)
Feb 02 PHP
php中DOMElement操作xml文档实例演示
Mar 26 PHP
php中文验证码实现示例分享
Jan 12 PHP
PHP用反撇号执行外部命令
Apr 14 PHP
php实现SAE上使用storage上传与下载文件的方法
Jun 29 PHP
PHP使用逆波兰式计算工资的方法
Jul 29 PHP
PHP MVC框架路由学习笔记
Mar 02 PHP
php遍历解析xml字符串的方法
May 05 PHP
Laravel 集成微信用户登录和绑定的实现
Dec 27 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/06/26 PHP
PHP更新购物车数量(表单部分/PHP处理部分)
2013/05/03 PHP
php中fsockopen用法实例
2015/01/05 PHP
js 页面执行时间计算代码
2009/03/04 Javascript
JavaScript调用堆栈及setTimeout使用方法深入剖析
2013/02/16 Javascript
js整数字符串转换为金额类型数据(示例代码)
2013/12/26 Javascript
jquery五角星评分插件示例分享
2014/02/21 Javascript
JS是按值传递还是按引用传递
2015/01/30 Javascript
再谈JavaScript线程
2015/07/10 Javascript
js实现的Easy Tabs选项卡用法实例
2015/09/06 Javascript
学习使用AngularJS文件上传控件
2016/02/16 Javascript
Angular发布1.5正式版,专注于向Angular 2的过渡
2016/02/18 Javascript
Web前端新人笔记之jquery入门心得(新手必看)
2016/05/17 Javascript
NodeJS与HTML5相结合实现拖拽多个文件上传到服务器的实现方法
2016/07/26 NodeJs
js模式化窗口问题![window.dialogArguments]
2016/10/30 Javascript
jquery css实现邮箱自动补全
2016/11/14 Javascript
JavaScript Date 知识浅析
2017/01/29 Javascript
JavaScript实现反转字符串的方法详解
2017/04/27 Javascript
Angular4表单验证代码详解
2017/09/03 Javascript
vue-cli项目代理proxyTable配置exclude的方法
2018/09/20 Javascript
JavaScript ES6常用基础知识总结
2019/02/09 Javascript
nodejs通过钉钉群机器人推送消息的实现代码
2019/05/05 NodeJs
在vue中使用image-webpack-loader实例
2020/11/12 Javascript
从Python程序中访问Java类的简单示例
2015/04/20 Python
Python中利用原始套接字进行网络编程的示例
2015/05/04 Python
python的多重继承的理解
2017/08/06 Python
TensorFlow实现iris数据集线性回归
2018/09/07 Python
在Python中分别打印列表中的每一个元素方法
2018/11/07 Python
Python函数和模块的使用总结
2019/05/20 Python
通过python 执行 nohup 不生效的解决
2020/04/16 Python
Python json格式化打印实现过程解析
2020/07/21 Python
数据库笔试题
2013/05/09 面试题
在C#中如何实现多态
2014/07/02 面试题
Java面试题:说出如下代码的执行结果
2015/10/30 面试题
pandas数值排序的实现实例
2021/07/25 Python
Python天气语音播报小助手
2021/09/25 Python