类: 是某一类事物的抽象,是某类对象的蓝图.

举例:

比如: 女娲造人时,脑子中关于人的形象 就是人类 class Human

如果,女娲决定造人---->形象又没最终定稿时,---->她脑子有哪些支离破碎的形象呢?

她可能会这么思考:

动物: 会吃饭

猴子: 会奔跑

猴子: 会哭

自己: 会思考

小鸟:会 飞

定义如下功能:

eat()

run();

cry();

think();

interface:接口

//interface:接口
interface animal {public function eat ( ) ; //吃
}interface monkey {public function run ( ) ; //跑public function cry ( ) ; //哭
}interface wisdom {public function think ( ) ; //思考
}interface bird {public function fly ( ) ; //飞
}/***
如上,我们把每个类中的这种实现的功能拆出来
分析: 如果有一种新生物,实现了eat() + run() +cry() + think() ,这种智慧生物,可以叫做人.
***//*
class Human implements animal,monkey,wisdom {}Class Human contains 4 abstract methods
竟然说我有4个抽象方法-----------------因为接口的方法本身就是抽象的,不要有方法体,也不必加abstract -----------------
*/class Human implements animal , monkey , wisdom {public function eat ( ) {echo '吃' ;}public function run ( ) {echo '走' ;}public function cry ( ) {echo '哭' ;}public function think ( ) {echo '思考' ;}
}$lisi = new Human ( ) ;
$lisi -> think ( ) ;

重点说明:

类如果是一种事物/【动物】的抽象

那么 接口,则是事物/动物----------【功能】的抽象,

功能各拆成小块------>自由组合成新的物种

示例:

class BirdMan implements animal , monkey , wisdom , bird {public function eat ( ) {echo '吃' ;}public function run ( ) {echo '走' ;}public function cry ( ) {echo '哭' ;}public function think ( ) {echo '思考' ;}public function fly ( ) {echo 'hi,我是天使,但大家都叫我鸟人' ;}
}echo '<br />' ;$birdli = new BirdMan ( ) ;
$birdli -> fly ( ) ;

接口的具体语法:

1:以人类为, class Human 是人的草图

接口 是零件--->可以用多种零件组合出一种新物种来.

2: 如上,[接口本身]即是---------抽象的,

[内部声明的方法] 默认也是---------抽象的,不用加 abstract

3: 一个类可以一次性实现多个接口.

interface animal {public function eat ( ) ;
}interface monkey extends animal {public function run ( ) ;public function cry ( ) ;
}interface wisdom {public function think ( ) ;
}interface bird extends animal {public function fly ( ) ;
}class Human implements monkey , wisdom {public function eat ( ) {echo '吃' ;}
/*    public function eat() {echo '吃';}
致命错误:类人包含抽象方法,因此必须被声明为抽象或实现的方法eat()
父类eat也会继承*/public function run ( ) {echo '走' ;}public function cry ( ) {echo '哭' ;}public function think ( ) {echo '思考' ;}
}

语法用【 implements 实现 】(把我这几个功能实现了)

class ClassName implements interface1,interface2,interface3 {
}

然后再把接口的功能给实现.

4 接口也可以继承, 用extends

5:接口是一堆方法的说明,不能加属性

6:接口就是供组装成类用的,封闭起来没有意义,因此方法只能是public

面向对象的一个观点:

做的越多,越容易犯错

抽象类{就定义类模板}--------------->具体子类实现{语言展现china,japan,english}

接口:

抽象的数据库类

举例:

----------->创业做网站:

到底用什么数据库? mysql, oracle,sqlserver,postgresql?

这样:先开发网站,运行再说.

先弄个mysql开发着,正式上线了再换数据库也不迟

----------->引来问题:

换数据库,会不会以前的代码又得重写?

答:不必,用抽象类

----------->开发者,开发时,就以db抽象类来开发.

abstract class db {public abstract function connect ( $h , $u , $p ) ; //链接功能public abstract function query ( $sql ) ; //发送sqlpublic abstract function close ( ) ; //关闭
}

下面这个代码有误

因为子类实现时, connect和抽象类的connect参数不一致

错误的代码

Default

class mysql extends db {public function connect ( $ h , $ h ) {return true ;}public function query ( $ sql , $ conn ) {}public function close ( ) {}
}

正确的严格的抽象类调用!

下面这个mysql类,严格实现了db抽象类

PHP

下面这个 mysql类 ,严格实现了 db抽象类  试想 : 不管上线时 ,真正用什么数据库
我只需要再写一份如下类

class oracle extends db {
}class mssql extends db {
}class postsql extends db {
}

业务逻辑层不用改 ?为什么不用改 ?因为都实现的 db抽象类 .我开发时 ,调用方法不清楚的地方 ,我就可以参考 db抽象类 .反正子类都是严格实现的抽象类 .

class mysql extends db {public function connect ( $h , $h , $u ) {return true ;}public function query ( $sql ) {}public function close ( ) {}
}

接口 就更加抽象了比如一个社交网站,

关于用户的处理是核心应用.

登陆

退出

写信

看信

招呼

更换心情

吃饭

骂人

捣乱

示爱

撩骚

这么多的方法,都是用户的方法,

自然可以写一个user类,全包装起来

但是,分析用户一次性使不了这么方法

用户信息类:{登陆,写信,看信,招呼,更换心情,退出}

用户娱乐类:{登陆,骂人,捣乱,示爱,撩骚,退出}

开发网站前,分析出来这么多方法,

但是,不能都装在一个类里,

分成了2个类,甚至更多.

作用应用逻辑的开发,这么多的类,这么多的方法,都晕了.

interface UserBase {public function login ( $u , $p ) ;public function logout ( ) ;
}
//登陆 退出
interface UserMsg {public function wirteMsg ( $to , $title , $content ) ; //写信public function readMsg ( $from , $title ) ; //收信
}interface UserFun {public function spit ( $to ) ;public function showLove ( $to ) ;
}
//娱乐/*
作为调用者, 我不需要了解你的用户信息类,用户娱乐类,
我就可以知道如何调用这两个类因为: 这两个类 都要实现 上述接口.
通过这个接口,就可以规范开发.*//*
下面这个类,和接口声明的参数不一样,就------------->报错,
这样,接口强制统一了类的功能
不管你有几个类,一个类中有几个方法我只知道,方法都是实现的接口的方法.
*/
class User implements UserBase {public function login ( $u ) {}
}

PHP接口的概念与接口的应用场景相关推荐

  1. 函数式接口的概念函数式接口的定义

    函数式接口 概念 函数式接口在Java中是指:有且仅有一个抽象方法的接口. 函数式接口,即适用于函数式编程场景的接口.而Java中的函数式编程体现就是Lambda,所以函数式接口就是可以适用于Lamb ...

  2. 第十章:Java之接口基本概念、接口实现多继承、Object类

    专栏目录首页:[专栏必读]Java基础教程和数据结构内容导航和学习说明 注意:本文中会多次使用上一节(第九章:Java多态理解.多态实现.重写.转型和抽象类)中的抽象类 文章目录 一:接口基本概念 ( ...

  3. 同一个项目相互调接口_超详细——接口测试总结与分享(一)

    1,接口的概念 1.接口是啥? 接口是传递数据的通道 接口测试: 是测试系统组件间接口的一种测试 接口主要包括: 同一个系统中模块与模块间的接口/前端后端接口, 另一个是跨系统平台与平台间的对接(内部 ...

  4. Java8之函数式接口及常用函数式接口

    目录 函数式接口 1.概念 2.@FunctionalInterface 3.函数式接口使用方式 常用函数式接口 1.JDK提供的函数式接口举栗 2.Supplier 3.Consumer 4.Pre ...

  5. java中接口文件创建_功能接口简介–在Java 8中重新创建的概念

    java中接口文件创建 世界各地的所有Java开发人员都将至少使用以下接口之一:java.lang.Runnable,java.awt.event.ActionListener,java.util.C ...

  6. Java中抽象类和接口在概念、语法和应用上的区别和关系

    2019独角兽企业重金招聘Python工程师标准>>> 春招开始了,盆友们都忙着准备笔试.准备面试,复习学过的知识点,当然我也不例外,在这里祝每一个"有心人"心想 ...

  7. 十一、接口(接口的概念,实现,继承,实现)、抽象类与抽象方法(抽象类,抽象方法概念,使用)...

    接口 接口是一种用来定义程序的协议,它描述可属于任何类和结构的一组相关行为. 接口可由方法.属性.事件和索引器这四种成员类型的任何组合构成,但不能包含字段. 接口通过类继承来实现,一个类虽然只能继承一 ...

  8. 【Web接口测试_基础概念】接口概念、接口分类、接口定义、接口规范、接口方法、接口用例设计整理

    [接口基础] 1.接口测试概念 1.1 基础概念 接口的定义:接口英文"interface",表示某个对象和外界交互的部分. 1.2接口的分类: ①用户UI接口,表示提供给用户操作 ...

  9. 抽象类、抽象方法、封装的概念、接口的含义(Java 从自学到就业 第12天)

    Java 学习记录 第十二天 由于本渣渣是前端转行Java,所以编辑器的选择就直接用 webstorm 同公司的 idea 接下来的知识梳理有一部分会借鉴大佬 廖雪峰的博客 学习目标 结合抽象类对多态 ...

最新文章

  1. Machine Learning for Encrypted Malware Traffic Classification
  2. CGI,BOA配置心得
  3. .Net Core应用框架Util介绍(二)
  4. hibernate批量查询_使用Hibernate批量获取
  5. 流畅的Python 1. Python数据模型(特殊方法 __func__())
  6. WPF中自动增加行(动画)的TextBox
  7. python 识别图形验证码_Python验证码识别
  8. python函数赋值给对象_【Python核心编程笔记】一、Python中一切皆对象
  9. java系列4:数组的默认值
  10. 很多大企业都在用的Pentaho 商业分析软件中存在多个严重缺陷
  11. python3.6 配置COCO API出错解决方案
  12. Vue插槽(solt)简单案例
  13. matlab有限体积网格,用Matlab实现简单有限体积求解器
  14. 数据可视化软件有什么特点
  15. standard、singleTop、singleTask、singleInstance
  16. deepinv2 添加打印机_科学网-Deepin Linux虚拟PDF打印机的安装与妙用-黄健的博文
  17. (原創) 如何讓ThinkPad的TrackPoint的中鍵支援MSN、FireFox、IE7和Office 2007的捲動? (NB) (ThinkPad)...
  18. 单元测试总结反思_考试后的总结与反思600字
  19. android 周月切换,SuperCalendar: @Deprecated android 自定义日历控件 支持左右无限滑动 周月切换 标记日期显示 自定义显示效果跳转到指定日期...
  20. 五大主流浏览器和内核

热门文章

  1. HBuilder X 初体验
  2. JavaSE-Lambada
  3. 《精通Oracle Database 12c SQL PL/SQL编程(第3版)》代码下载
  4. 大数据分析处理关键技术有哪些?
  5. VIPServer:阿里智能地址映射及环境管理系统详解
  6. HTML 文本域textarea
  7. Flink on Kubernetes
  8. 关于POS终端安全 PCI做了哪些要求?
  9. Xadmin文档(二)
  10. Stata+R:分位数回归一文读懂