面向对象中接口的意义

前言

1.这篇文章仅限于对php的面向对象进行说明,其他语言的情况不再考虑之列。
2.本人学生,难免有不足之处,希望各位大神指出。


正文

当我们在刚开始学习php这门语言的面向对象时,我们难免会对接口感觉到很陌生,因为它仅仅可以用来实现,而看起来任何意义,它不像继承一样可以让我们的类增加许多新的方法和属性,比如下面这种代码

Icalculate.php
<?php
interface Icalculate
{
    public function add($value1, $value2);
    public function ave($value1, $value2);
}```
现在有一个类实现了它

Calculate.php
<?php
include "Icalculate.php";
class Calculate implements Icalculate
{
public function add($value1, $value2)
{
return $value1 + $value2;
}

public function ave($value1, $value2) 
{
    return ($value1 + $value2) / 2;
}

}```
很多萌新看到后会想,这种接口,要不要是一样的,为什么还要存在呢?确实,让我们去掉接口

class Calculate 
{
    public function add($value1, $value2) 
    {
        return $value1 + $value2;     
    }   
    
    public function ave($value1, $value2) 
    {
        return ($value1 + $value2) / 2;
    }
}```
这样的代码也是完全可以的,甚至说还减少了由于实现接口不当而造成程序语法错误的几率。但是真的接口就像上面的例子一样毫无用处吗?我可以很明确的说不是的,因为东西肯定是要有意义才会存在。
***
####用于合作
我们不妨考虑一下这样的情况:小明和小红<b>合作</b>写一个程序,目的是要实现输入两个数,求出最后的和以及平均数。小明说他来写加法的类,而小红去写数据的获得和输出。考虑一下如果没有接口,小红可能会这样写

index.php
<?php
include "Calculate.php";
$v1 = $_POST['v1'];
$v2 = $_POST['v2'];
$Cal = new Calculate();
echo $Cal->plus($v1, $v2).'
';
echo $Cal->average($v1, $v2);

而小明写的代码如同一开始举的例子那样,这两个文件放在一起,程序是不能执行的,错误会是这样

Fatal error: Uncaught Error: Call to undefined method
Calculate::plus() in /home/frog/PHPCode/index.php:6```
原因大家都懂,Calculate这个类没有plus这个方法,虽然add和plus这两个单词都有加的意思,但是很显然小明却没有像小红想得那样命名方法,所以最后导致了错误。但是在有接口的情况下,只要小红正确的使用接口,错误就不会发生。


可替换性

接着上面的例子,如果将来哪一天,小明觉得自己的类写的不好,不能够记录算出来的结果,他想改改自己的类而又不能影响原来程序的运行。在有接口的情况下是非常简单的,因为他知道了那些东西要保留。

Calculate.php
<?php
// 修改之后的Calculate类
include "Icalculate.php";
class Calculate implements Icalculate 
{
    protected $result;

    public function getLastResult() {
        return $this->result;
    }    

    public function add($value1, $value2) 
    {
        $this->result = $value1 + $value2;
        return $this->result;     
    }   
    
    public function ave($value1, $value2) 
    {
        $this->result = ($value1 + $value2) / 2;
        return $this->result;
    }
}```
现在修改完原来的代码之后,程序可以运行,而且新的功能也实现了,现在可以通过`getLastResult`方法来获得上一次的运行结果。
***
####总结
虽然上面的例子看起来都很容易,但是如果把合作的人数放大10倍,每个人的工作量放大100倍,那么接口的意义就会更加明显。如果每个人都使用自己的命名方式,光是在开发调试时改变量名就会是巨大的挑战,而对于修改自己的代码来说也是这样,是一场灾难。所以说推荐大家在写自己的代码的时候先想好接口再手,这样才能在后期的维护中省不少心。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,518评论 25 707
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,587评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,600评论 18 139
  • 五月二十一号 星期天 天气晴 期待已久的写生课今天终于来到了,早上和小伙伴们一块出发去潍坊-东方乐园,老师一...
    楚亦菲妈妈阅读 72评论 0 0