首页 > 语言 > PHP > 正文

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

2024-09-04 11:43:48
字体:大 中 小
来源:转载
供稿:网友

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

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

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

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

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

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

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

Example #1 接口代码示例:

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

Example #2 Extendable Interfaces

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

Example #3 多个接口间的继承

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

Example #4 使用接口常量

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表