php 抽象类和接口(php抽象类和接口知识点整理总结)
php 抽象类和接口
php抽象类和接口知识点整理总结本文实例总结了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程序设计有所帮助。
原文链接:https://blog.csdn.net/qq_25861247/article/details/79215997
- python核心编程内容(顶级大神Linux,Python,Go,PHP之父谁是夜猫子?用Python揭秘!)
- wampserver怎么使用(wampserver怎么用?如何使用wampserver来配置本地php环境)
- 怎么用单元测试php(PHP使用phpunit进行单元测试示例)
- php函数使用教程讲解(php函数式编程简单示例)
- thinkphp5 api开发(thinkphp5框架前后端分离项目实现分页功能的方法分析)
- thinkphp5单例原理(Thinkphp5框架简单实现钩子Hook行为的方法示例)
- 在php中遍历数组使用(PHP读取远程txt文档到数组并实现遍历)
- phplaravel一般开发什么项目(laravel 去掉index.php伪静态的操作方法)
- php怎么修改单独一行数据(PHP实现批量修改文件名的方法示例)
- php中怎么判断变量类型(PHP INT类型在内存中占字节详解)
- php中数组使用技巧(php常用经典函数集锦数组、字符串、栈、队列、排序等)
- php面向对象如何开发(PHP创建对象的六种方式实例总结)
- php去水印方法(PHP开发的文字水印,缩略图,图片水印实现类与用法示例)
- web项目部署到阿里云服务器上(阿里云的WindowsServer2016上部署php+apache)
- php建造者模式实例(PHP工厂模式、单例模式与注册树模式实例详解)
- php获取数组中和为指定数的数组(php统计数组不同元素的个数的实例方法)
- 谢广坤,你这么欺负谢腾飞,良心不会痛吗(你这么欺负谢腾飞)
- 乡村爱情15 宋晓峰怀疑自己孩子,腾飞与姜奶奶亲子鉴定出结果(宋晓峰怀疑自己孩子)
- 《乡村爱情13》开播,新版刘能以假乱真,编剧思维进入瓶颈(新版刘能以假乱真)
- 当年的 白洋淀战神 练肌肉 嘎子哥也成为行走的荷尔蒙(当年的白洋淀战神)
- 肌肉小子陈康, 亚洲巨兽 黄哲勋,哪个才是你的菜(肌肉小子陈康亚洲巨兽)
- 新闻周刊 青岛网红 赵厂长 编段子一箩筐输出快乐,陪父亲十二载勇斗病魔(新闻周刊青岛网红)
热门推荐
- ASP.NET中Web API的简单实例
- css分割线使用教程(css实现文章分割线样式的多种方法总结)
- php获取数组中和为指定数的数组(php统计数组不同元素的个数的实例方法)
- 如何保证幂等性(聊聊幂等性如何保证的)
- 织梦仿站流程图解(织梦sitemap地图实时推送给百度的教程)
- vue websocket实时刷新数据(Vue+WebSocket页面实时刷新长连接的实现)
- react组件的参数怎样定义的(详解React中组件之间通信的方式)
- python中的isi(深入浅析Python 中 is 语法带来的误解)
- centos7 apache配置(CentOSLinux下的apache服务器配置与管理方法分享)
- javascriptloop教程(JavaScript中的AOP编程的基本实现)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9