深入分析php中接口与抽象类的区别

yipeiwu_com7年前PHP代码库
接口和抽象类真的很难区分开,引文他们很相似,方法都没有定义逻辑,都是供子类是想或继承的。区分二者只要记住一句话:接口是规范,类是实现。接口的目的是定义一个规范,大家都遵守这个规范。

也就是说,从目的上可以很清楚地区分接口和抽象类。那么还是有疑问,既然有了借口,那么为什么还必须有抽象类呢?

加入我们要定义一个名为Animal的类,该类有两个子集Dog和Cattle,二者都有两个方法:run()方法和speak()方法。

假定Dog和Cattle的“跑(run)”是相同的,因此run()方法具有相同的业务逻辑;而“叫(speak)”是不同的,因此speak()方法的业务逻辑不同。而且,有一个IAnimal的接口规定必须有这两个方法,这意味着Animal类必须实现这两个方法,同样,Dog和Cattle这两个子类也必须有这两个方法吗,那么我们可以这样定义:
复制代码 代码如下:

<?php
interface IAnimal{
 public function run();
 public function speak();
}
class Animal implements IAnimal{
 public function run(){
  //在这里可以添加一些相同的run逻辑
  return "same run<br />";
 }
 public function speak(){
  //这里可以添加一些相同的speak逻辑
  return "same speak<br />";
 }
}
class Dog extends Animal{
 public function speak(){
  //在这里可以添加一些Dog逻辑
  return "Dog speak<br />";
 }
}
class Cattle extends Animal{
 public function speak(){
  //在这里可以添加一些Cattle逻辑
  return "Cattle speak<br />";
 }
}
$oDog=new Dog();
echo($oDog->run());
echo($oDog->speak());
$oCattle=new Cattle();
echo($oCattle->run());
echo($oCattle->speak());
?>

相关文章

php判断目录存在的简单方法

PHP判断文件或目录是否存在 file_exists:判断文件是否存在 $file = "check.txt"; if(file_exists($file)) { echo...

PHP几个数学计算的内部函数学习整理

round round - 对浮点数进行四舍五入。round 函数语法如下: round(float,precision) 其中参数 precision 表示小数点后面要保持的精度位数。...

PHP实现搜索时记住状态的方法示例

本文实例讲述了PHP实现搜索时记住状态的方法。分享给大家供大家参考,具体如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tra...

php xml分析函数代码第1/2页

首先我得承认我喜欢计算机标准。如果每个人都遵从这个行业的标准,互联网将会是一个更好的媒体。使用标准化的数据交换格式才能使开放的和独立于平台的计算模式切实可行。这就是我作为XML爱好者的原...

php写app用的框架整理

PHP开发app常用的三种框架介绍 1、ThinkPHP框架 TP框架是一共快速兼容简单的轻量级国产PHP开发框架,使用面向对象的结构和MVC模式进行开发。它可以支持Windows、Li...