首页 > 作文

PHP抽象类与接口的区别实例详解

更新时间:2023-04-07 08:50:58 阅读: 评论:0

本文实例讲述了php抽象类与接口的区别。分享给大家供大家参考,具体如下:

抽象类abstract

概念

定义为抽象的类不能被实例化。任何一个类,如果有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的类。

继承一个抽象类的时候,子类必须定义父类中的所有抽象方法,这些方法的访问控制必须喝父类中一样或者更为宽松。

例如,某个抽象方法被声明为proteced,那么子类中的实现,就应该声明为protected或者public,而不能定义为private。

方法的调用方式必须匹配,即类型和所需参数数量必须一致,例如,子类定义了一个可选参数,而父类抽象方法中没有声明,则两者的声明并没有冲突。

特点

抽象类继承,使用关键字extends。抽象类可以声明各种变量、常量、方法。抽象类可以有构造函数。抽象类中的方法可以是公开的public、保护的protected、私有的private。一个类只能继承一个抽象类。

示例

示例一

<?php// 抽象类abstract class abstractclasss{  // 强制要求子类定义这些方法  abstract protected function getvalue();  abstract protected function prefixvalue();  // 普通方法(非抽象方法)  public function printout()   {    print $this->getvalue() . "\n";  }}// 子类class concreteclassone extends abstractclass{  protected function getvalue()  {    return "concreteclassone";  }  public function prefixvalue我真棒作文s($prefix)  {    return "{$prefix}concreteclassone";  }}// 子类class concreteclasstwo extends abstractclass{  protected function getvalue()  {    return "concreteclasstwo";  }  public function prefixvalue($prefix)  {    return "{$prefix}concreteclasstwo";  }}// 实例化第一个子类$classone = new concreteclassone;$classone->printout();echo $classone->preculturefixvalue('foo_') . "\n";// 实例化第二个子类$classtwo = new concreteclasstwo;$爱情真善美歌曲classtwo->printout();echo $classtwo->prefixvalue('foo_') . "\n";

结果输出

concreteclassone
foo_concreteclassone

concreteclasstwo
foo_concreteclasstwo

示例二

<?php// 抽象类abstract class abstractclass{  // 我们的抽象方法仅需要定义需要的参数  abstract protected function prefixname($name);}// 子类class concreteclass extends abstractclass{  // 我们的子类可以定义父类签名中不存在的可选参数  public function prefixname($name, $parator = ".")  {    if ($name == "pacman") {      $prefix = "mr";    } elif ($name == "pacwoman") {      $prefix = "mrs";    } el {      $prefix = "";    }    return "{$prefix}{$parator} {$name}";  }}// 实例化子类$class = new concreteclass;echo $class->prefixname("pacman") . "\n";echo $class->prefixname("pacwoman") . "\n";

结果输出

mr. pacman
mrs, pacwoman

接口interface

概念

使用接口interface,可以指定某个类必须实现那些方法,但是不需要定义这些方法的具体内容。

要实现一个接口,使用implements操作符,类中必须实现接口中定义的所有方法。

特点

接口的实现,使用关键字implements。接口中不能声明变量,但是可以声明常量。接口中没有构造函数。接口中的方法默认都是公开的public。一个类可以实现多个接口。

示例

示例一 、 实现接口

<?php// 声明一个itemplate接口interface itemplate{  public function tvariable($name, $var);  public function gethtml($template);}// 实现接口// 下面的写法是正确的class template implements itemplate{  private $vars = array();  public function tvariable($name, $var)  {    $this->vars[$name] = $var;  }  public function gethtml($template)  {    foreach($this->vars as $name => $value) {      $template = str_replace('{' . $name . '}', $value, $template);    }    return $template;  }}// 下面的楷书写法是错误的,会报错,因为没有实现 gethtml()// fatal error: class badtemplate contains 1 abstract methonds// and must therefore be declared abstaract (itemplate::gethtml)class badtemplate implement中华复兴社s itemplate{  private $vars = array();  public function tvariable($name, $var)  {    $this->vars[$name] = $var;  }}

示例二 、 可扩充接口

<?phpinterface a{  public function foo();}interface b extends a{  public function baz(baz $baz);}// 正确的写法class c implements b{  public function foo()  {  }  public function baz(baz $baz)  {  }}// 错误的写法会导致一个致命的错误class d implements b{  public function foo()  {  }  public function baz(foo $foo)  {  }}

示例三 、 继承多个接口

<?phpinterface a{  public function foo();}interface b{  public function bar();}interface c extends a, b{  public function baz();}class d implements c{  public function foo()  {  }  public function bar()  {  }  public function baz()  {  }}

示例四 、使用接口常量

<?phpinterface a{  const b = 'interface constant';}// 输出接口变量echo a:b;// 错误的写法,因为常量不能被覆盖。// 接口常量的概念和类常量的是一样的。class b implements a{  const b = 'class constant'}

更多关于php相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《php数组(array)操作技巧大全》、《php基本语法入门教程》、《php运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家php程序设计有所帮助。

本文发布于:2023-04-07 08:50:56,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/7874a4d2d92d28cb3510af6b55d4cd11.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:PHP抽象类与接口的区别实例详解.doc

本文 PDF 下载地址:PHP抽象类与接口的区别实例详解.pdf

标签:接口   子类   方法   抽象
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图