前言
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倍,那么接口的意义就会更加明显。如果每个人都使用自己的命名方式,光是在开发调试时改变量名就会是巨大的挑战,而对于修改自己的代码来说也是这样,是一场灾难。所以说推荐大家在写自己的代码的时候先想好接口再手,这样才能在后期的维护中省不少心。