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

Example #2 Extendable Interfaces

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

Example #3 多个接口间的继承

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

Example #4 使用接口常量

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

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