PHP抽象类和对象接口

抽象类

PHP5.0起支持抽象类和抽象方法,抽象类不能被实例化。任何一个类,如果包含至少一个被声明为抽象的方法,那么这个类就必须被声明为抽象的。被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。
继承一个抽象类时,子类必须定义父类中的所有抽象方法,并且这些方法的访问控制必须和父类中一样或者更为宽松。此外,子类实现父类抽象方法时,可以在抽象方法的参数的基础上添加一些可选的参数。

<?php
abstract class A {
    protected abstract function foo();

    public abstract function bar($arg1);
    
    public function test(){
        return get_class($this);
    }
}

class B extends A {
    public function foo(){
        echo "foo".$this->test()."\n";
    }
    
    public function bar($arg1,$arg2="option"){
        echo "bar".",".$arg1.",".$arg2."\n";
    }
}
$b=new B();
$b->foo();
$b->bar("b");
$b->bar("b","bb");
?>

接口

接口通过interface关键字定义,其中的方法没有实现,只有方法的定义,接口中所有的方法都必须是public的,一个类要实现一个接口,需要通过implements关键字,类必须实现接口中定义的所有方法,且和接口中所定义的方法完全一致,否则会报一个致命错误,类可以实现多个接口,接口用逗号分隔。一个类实现多个接口时,接口中不能重名方法。一个接口也可以通过extends关键字继承另一个接口。接口中也可以定义常量,与类常量的使用完全相同,但是不能被子类或子接口覆盖。

<?php
interface A{
    const t = 'constant t ';
    public function fooA();
}
interface B{
    public function fooB();
}
interface SubA extends A{
    public function barA($var);
}

class C implements SubA,B{
    public function fooA(){
        echo "C:fooA() implements from SubA\n";
    }
    
    public function barA($var){
        echo "C:barA() implements from SubA $var\n";
    }
    public function fooB(){
         echo "C:fooB() implements from B \n";
    }
}
$c=new C();
$c->fooA();
$c->barA("test");
$c->fooB();
echo C::t;
?>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值