浅析php接口操作interface关键字的用法及应用实例

interface是面向对象编程语言中接口操作的关键字,功能是把所需成员组合起来,以封装一定功能的集合,本文我们来讲讲interface基本知识及用法实例.

接口是一种约束形式,其中只包括成员定义,不包含成员实现的内容,用接口(interface),你可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容,我们可以通过interface来定义一个接口,就像定义一个标准的类一样,但其中定义所有的方法都是空的.

接口中定义的所有方法都必须是public,这是接口的特性.

实现:要实现一个接口,可以使用implements操作符,类中必须实现接口中定义的所有方法,否则会报一个fatal错误,如果要实现多个接口,可以用逗号来分隔多个接口的名称.

Note:实现多个接口时,接口中的方法不能有重名.

Note:接口也可以继承,通过使用extends操作符.

常量:接口中也可以定义常量,接口常量和类常量的使用完全相同,它们都是定值,不能被子类或子接口修改.

Example #1 接口代码示例:

  1. <?php
  2. // 声明一个'iTemplate'接口
  3. interface iTemplate
  4. {
  5. public function setVariable($name, $var);
  6. public function getHtml($template);
  7. }
  8. // 实现接口
  9. // 下面的写法是正确的
  10. class Template implements iTemplate
  11. {
  12. private $vars = array();
  13. public function setVariable($name, $var)
  14. {
  15. $this->vars[$name] = $var;
  16. }
  17. public function getHtml($template)
  18. {
  19. foreach($this->vars as $name => $value) {
  20. $template = str_replace('{' . $name . '}', $value, $template);
  21. }
  22. return $template;
  23. }
  24. }
  25. // 下面的写法是错误的,会报错:
  26. // Fatal error: Class BadTemplate contains 1 abstract methods
  27. // and must therefore be declared abstract (iTemplate::getHtml)
  28. class BadTemplate implements iTemplate
  29. { //开源软件:phpfensi.com
  30. private $vars = array();
  31. public function setVariable($name, $var)
  32. {
  33. $this->vars[$name] = $var;
  34. }
  35. }
  36. ?>

Example #2 Extendable Interfaces

  1. <?php
  2. interface a
  3. {
  4. public function foo();
  5. }
  6. interface b extends a
  7. {
  8. public function baz(Baz $baz);
  9. }
  10. // 正确写法
  11. class c implements b
  12. {
  13. public function foo()
  14. {
  15. }
  16. public function baz(Baz $baz)
  17. {
  18. }
  19. }
  20. // 错误写法会导致一个fatal error
  21. class d implements b
  22. {
  23. public function foo()
  24. {
  25. }
  26. public function baz(Foo $foo)
  27. {
  28. }
  29. }
  30. ?>

Example #3 多个接口间的继承

  1. <?php
  2. interface a
  3. {
  4. public function foo();
  5. }
  6. interface b
  7. {
  8. public function bar();
  9. }
  10. interface c extends a, b
  11. {
  12. public function baz();
  13. }
  14. class d implements c
  15. {
  16. public function foo()
  17. {
  18. }
  19. public function bar()
  20. {
  21. }
  22. public function baz()
  23. {
  24. }
  25. }
  26. ?>

Example #4 使用接口常量

  1. <?php
  2. interface a
  3. {
  4. const b = 'Interface constant';
  5. }
  6. // 输出接口常量
  7. echo a::b;
  8. // 错误写法,因为常量的值不能被修改。接口常量的概念和类常量是一样的。
  9. class b implements a
  10. {
  11. const b = 'Class constant';
  12. }
  13. ?>