php-抽象类和接口

2023-03-03 19:24:03 浏览数 (1)

浏览量 1

抽象类 任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。 定义为抽象的类不能被实例化。 被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。 继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)

代码语言:javascript复制
<?php
abstract class AbstractClass{
// 强制要求子类定义这些方法    
abstract protected function getValue();    
abstract protected function prefixValue($prefix);    
// 普通方法(非抽象方法)    
public function printOut() {        
    print $this->getValue() . PHP_EOL;    
    }
}
class ConcreteClass1 extends AbstractClass{    
    protected function getValue() {        
        return "ConcreteClass1";    
    }    
    public function prefixValue($prefix) {        
        return "{$prefix}ConcreteClass1";    
        }
    }
class ConcreteClass2 extends AbstractClass{    
    public function getValue() {        
        return "ConcreteClass2";    
    }    
    public function prefixValue($prefix) {        
        return "{$prefix}ConcreteClass2";    
    }
}
$class1 = new ConcreteClass1;
$class1->printOut();
echo $class1->prefixValue('FOO_') . PHP_EOL;
$class2 = new ConcreteClass2;
$class2->printOut();
echo $class2->prefixValue('FOO_') . PHP_EOL;
?>

接口 使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。 接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。 接口中定义的所有方法都必须是公有,这是接口的特性。 要实现一个接口,使用 implements 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。

代码语言:javascript复制
<?php
// 声明一个'iTemplate'接口
interface iTemplate{    
    public function setVariable($name, $var);    
    public function getHtml($template);
}
// 实现接口
class Template implements iTemplate{    
    private $vars = array();      
    public function setVariable($name, $var){        
        $this->vars[$name] = $var;    
    }      
    public function getHtml($template){
        foreach($this->vars as $name => $value) {            
            $template = str_replace('{' . $name . '}', $value, $template);             }        
        return $template;    
    }
}

0 人点赞