<?php
/***
====笔记部分====
接口的具体语法:
0:以人类为, class Human 是人的草图
而接口 是零件
可以用多种零件组合出一种新特种来.
1: 如上,接口本身即是抽象的,内部声明的方法 默认也是抽象的.
不用加 abstract
2: 一个类可以一次性实现多个接口.
语法用 implements 实现 (把我这几个功能实现了)
class ClassName implements interface1,interface2,interface3 {
}
然后再把接口的功能给实现.
3: 接口也可以继承, 用extends
4:接口是一堆方法的说明,不能加属性
5:接口就是供组装成类用的,封闭起来没有意义,因此方法只能是public
***/
interface animal {
protected function eat();
}
interface monkey extends animal {
public function run();
public function cry();
}
interface wisdom {
public function think();
}
interface bird extends animal{
public function fly();
}
/*
// 下面有误,monkey继承的aniaml接口,因此必须要把eat()实现
class Human implements monkey,wisdom {
public function run() {
echo '走';
}
public function cry() {
echo '哭';
}
public function think() {
echo '思考';
}
}
*/
class Human implements monkey,wisdom {
public function eat() {
echo '吃';
}
public function run() {
echo '走';
}
public function cry() {
echo '哭';
}
public function think() {
echo '思考';
}
}
?>
<?php
//04.php
/***
====笔记部分====
面向对象的一个观点:
做的越多,越容易犯错
抽象类{就定义类模板}--具体子类实现{china,japan,english}
接口:
***/
// 抽象的数据库类
/*
创业做网站
到底用什么数据库? mysql, oracle,sqlserver,postgresql?
这样:先开发网站,运行再说.
先弄个mysql开发着,正式上线了再数据库也不迟
引来问题:
换数据库,会不会以前的代码又得重写?
答:不必,用抽象类
开发者,开发时,就以db抽象类来开发.
*/
abstract class db {
public abstract function connect($h,$u,$p);
public abstract function query($sql);
public abstract function close();
}
/*
// 下面这个代码有误
// 因为子类实现时, connect和抽象类的connect参数不一致
class mysql extends db {
public function connect($h,$h) {
return true;
}
public function query($sql,$conn) {
}
public function close() {
}
}
*/
/*
下面这个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中抽象类和接口的介绍及二者间的区别

    接口(Interface)和抽象类(Abstract Class)是支持抽象类定义的两种机制. 一.抽象类 在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称 ...

  2. 转:二十一、详细解析Java中抽象类和接口的区别

    转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...

  3. C#中抽象类和接口的区别

    原文:C#中抽象类和接口的区别 大家在编程时都容易把抽象类和接口搞混,下面为大家从概念上讲解抽象类和接口的区别: 一.抽象类: 含有abstract修饰符的class即为抽象类,抽象类是特殊的类,只是 ...

  4. 关于JAVA中抽象类和接口的区别辨析

    今天主要整理一下新学习的有关于Java中抽象类和接口的相关知识和个人理解. 1 抽象类 用来描述事物的一般状态和行为,然后在其子类中去实现这些状态和行为.也就是说,抽象类中的方法,需要在子类中进行重写 ...

  5. java 8中抽象类与接口的异同

    1.java 8中抽象类与接口的异同 相同点: 1)都是抽象类型: 2)都可以有实现方法(以前接口不行): 3)都可以不需要实现类或者继承者去实现所有方法,(以前不行,现在接口中默认方法不需要实现者实 ...

  6. 谈谈php中抽象类和接口的区别

    php中抽象类和接口的区别 1) 概念 面向对象的三大概念:封装,继承,多态 把属性和方法封装起来就是类.        一个类的属性和方法被另外的类复制就是继承,PHP里面的任何类都可以被继承,被继 ...

  7. PHP中抽象类与接口的区别

    PHP中抽象类与接口的区别 抽象类abstract 概念 定义为抽象的类不能被实例化.任何一个类,如果有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的类. 继承一个抽象类的时候,子类必须定义 ...

  8. Typescript中抽象类与接口详细对比与应用场景介绍

    现如今,TS正在逐渐成为前端OO编程的不二之选,以下是我在学习过程中对抽象类和接口做的横向对比. 1. 抽象类当做父类,被继承.且抽象类的派生类的构造函数中必须调用super():接口可以当做“子类” ...

  9. 浅谈我对C#中抽象类与接口的理解

    C#中的抽象类与接口有些相似,初学者很容易混淆,今天就让我来谈谈对二者的理解. 首先我们得明确二者的含义,分述如下: 如果一个类不与具体的事物相联系,而只是表达一种抽象的概念,仅仅是作为其派生类的一个 ...

随机推荐

  1. jQuery 快速结束当前动画

    当需要快速结束一个当前正在执行的jquery 动画时(还没执行完成),如 fadeOut(),可以在执行当前动画的对象上执行 stop(true);方法 如: <script type=&quo ...

  2. Ext.net中常用的三种交互方式

    http://www.ext.net.cn/forum.php?mod=viewthread&tid=10433

  3. 13 - NSURLConnection

    一.互联网 基本概念: HTTP协议 统一标准获取网络资源(其他设备上的东西) 本机 -> 远程服务器(计算机) URL(http有格式的字符串) 本机 <- 远程服务器(计算机) Fil ...

  4. 令牌桶在数据通信QoS流量监管中的应用

    令牌桶(Tocken Bucket,以下简称TB)在流量监管(以下简称CAR)功能中完成对流量进行限速的作用.流量监管主要是应用与网络边缘,从而保证核心设备的正常数据处理. 在流量监管的处理过程中,首 ...

  5. IP数据报首部校验和算法

    当用google搜索IP数据报首部校验和算法的时候,总是看到的是代码,没有看到其过程,于是就有了此文,如有错误请指正.文章省略一点,呵呵   IP/ICMP/IGMP/TCP/UDP等协议的校验和算法 ...

  6. MDK的优化应用

    MDK的优化应用 http://blog.163.com/zhaojun_xf/blog/static/300505802011291384721/ 使用Keil/MDK这么多年了,一直都没有使用它的 ...

  7. 【linux kernel】 中断处理-中断下半部

    欢迎转载,转载时需保留作者信息,谢谢. 邮箱:tangzhongp@163.com 博客园地址:http://www.cnblogs.com/embedded-tzp Csdn博客地址:http:// ...

  8. BZOJ 3545: [ONTAK2010]Peaks( BST + 启发式合并 + 并查集 )

    这道题很好想, 离线, 按询问的x排序从小到大, 然后用并查集维护连通性, 用平衡树维护连通块的山的权值, 合并就用启发式合并.时间复杂度的话, 排序是O(mlogm + qlogq), 启发式合并是 ...

  9. int 转换成 CString(VC2008里有这个问题)

    int s = 123; CString str; str.Format("%d",s); 这样就可以了,但是有的会提示这个错误 如果出现这个错误,就改成下面这个就OK了:  st ...

  10. Javascript 调试利器 Firebug使用详解

    Javascript 调试利器 Firebug使用详解 有时候,为了更清楚方便的查看输出信息,我们可能需要将一些调试信息进行分组输出,那么可以使用console.group来对信息进行分组,在组信息输 ...