php 中的接口类、抽象类

一、接口 (Interface)

使用接口(Interface)可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容

接口通过(Interface)关键字来定义,接口中多有方法必须都是公有的

实现接口用(implements)操作符。类中必须实现接口中所有方法一个类可以实现多个接口,逗号分隔。接口可以继承。

// 示例
<?php

interface a
{
    public function test1();
}
interface b
{
    public function test2();
}
interface c extends a,b
{
    public function test3();
}
interface d
{
    const d = 'CONST';
    public function test4();
}

// 四个方法必须都实现,否则报致命错误
class test implements c,d
{
    public function test1() {}
    public function test2() {}
    public function test3() {}
    public function test4() {}
}

$obj = new test();
$obj->test1();
echo d::d; // 或者 echo $obj::d 或者 test::d

二、抽象类 (abstract)

php5 支持抽象类和抽象方法。抽象类不能实例化任何一个类只要它有一个抽象方法,那么该类就必须被声明为抽象的抽象类必须有一个抽象方法

继承抽象类的类必须实现父类中所有的抽象方法。此外若抽象类中的方法被声明为受保护的,那么子类中该方法就应该声明为受保护的或者公有的。而不能定义为私有的

// 示例
<?php
abstract class a
{
    const a = 'CONST';
    protected $a = "nnn";
    abstract protected function test1();
    public function test2() { echo 'a-test2';}
}

// 四个方法必须都实现,否则报致命错误
class test extends a
{
    public function test1() {echo "test1";}
    public function test2() {echo "test2";}
    public function test3() {echo "test3";}
    public function test4() {echo "test4";}
    public function echoA() {echo $this->a;}
}
$obj = new test();
$obj->test1();
$obj->test2();
$obj->echoA();
$obj::a // 或者 test::a, a::a

使用场景:接口主要用于表现事物的行为;抽象类主要用于不同事务的行为,抽象类中可以根据需要添加成员以支持更多功能,接口中不可以

// 示例
<?php
// 接口中名称不能跟抽象类名称相同
interface b
{
    public function iTest1();
}

abstract class a implements b
{
    const a = 'CONST';
    protected $a = "nnn";
    abstract protected function test1();
    public function test2() { echo 'a-test2';}
    // 该方法也可以在子类中实现
    public function iTest1(){}
}

// 四个方法必须都实现,否则报致命错误
class test extends a
{
    protected $a = "mmm";
    public function test1() {echo "test1";}
    public function test2() {echo "test2";}
    public function test3() {echo "test3";}
    public function test4() {echo "test4";}
    public function echoA()
    {
        var_dump($this->a);
    }
}
$obj = new test();
$obj->test1();
$obj->test2();
$obj->echoA();
var_dump($obj::a,test::a,a::a);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值