PHP接口、抽象类、对象、类各自定义

最近发现远离了基础,工作之余重新整理一遍关于PHP的基础知识,重新梳理一下,以便加强运用。

接口

接口的特点:

  1. 对接口的定义是关键字 interface
  2. 对接口的使用是通过关键字implements,多个采用逗号相隔
  3. 接口不能定义成员变量(包括类静态变量),只能定义常量
  4. 子类必须实现接口定义的所有方法
  5. 接口只能定义不能实现该方法,对方法(行为)进行抽象
  6. 接口没有构造函数
  7. 接口中的方法和实现它的类默认都是public类型的
  8. 不能实例化

永远记住一个特点:接口是定义行为规范(意思就是子类必须按照它的规则重写所有的方法)

下面分为两种继承方式

  1. 非抽象类继承
    // 定义接口 A
    interface A
    {
        // 特点一:只能定义常量
    //    public $a = '1234'; error
        const TEST_CONST ="567";
    
        // 特点二:接口里面的所有方法都是public 公共 并且只能定义不能实现
        public function speak();
    
        public function walk();
    
        public function run();
    
        //特点四:方法只能定义不能实现
    //    public function tools()
    //    {
    //        echo 1; error
    //    }
    }
    // 继承接口A
    class Info implements A
    {
        public $a = '1234';
    
        public function __construct()
        {
            $this->a = "789";
        }
    
        public function speak()
        {
            echo ‘重写方法’;
        }
    
        public function walk()
        {
            echo '必须重写接口的walk方法';
        }
    
        public function run()
        {
            echo '必须重写接口的run方法';
        }
    }
  2. 抽象类继承
abstract class Father implements A
{
    // 公共行为
    abstract public function fly(); // 抽象方法

    abstract public function walk(); // 抽象方法

    // 当抽象类重写了接口方法时候,那么继承抽象类的子类可以不需要重写接口方法了
    public function speak(){

        echo "father speak skill n";

    }

    abstract protected function jums();
    // 重写接口方法
    public function error()
    {
        echo '继承属性';
    }
}

抽象类

特点:

  1. 抽象类定义使用关键字:abstract
  2. 子类继承使用关键字:extends
  3. 子类必须定义父类中的所有抽象方法,这些方法的访问控制必须和父类中一样(或者更为宽松),抽象方法只定义,不实现
  4. 不能实例化,可以定义子类必须实现的抽象方法(只有定义为抽象方法才必须实现的)
  5. 如一个类中有一个抽象方法,则该类必须定义为抽象类,则这个类必须声明为:abstract
  6. 抽象类可以有构造函数
  7. 抽象类中的方法可以使用private,protected,public来修饰。
  8. 一个类可以同时实现多个接口,但一个类只能继承于一个抽象类。

抽象类和接口的区别

  1. 对接口的使用是通过关键字implements。对抽象类的使用是通过关键字extends。
  2. 接口定义使用 interface,抽象类定义使用 abstract
  3. 接口中不可以声明成员变量(包括类静态变量),但是可以声明类常量。抽象类中可以声明各种类型成员变量,实现数据的封装。(可以声明为public static final类型)
  4. 接口没有构造函数,抽象类可以有构造函数。
  5. 接口中的方法默认都是public类型的,而抽象类中的方法可以使用private,protected,public来修饰。

  6. 一个类可以同时实现多个接口,但一个类只能继承于一个抽象类。

抽象类还是接口

如果要创建一个模型,这个模型将由一些紧密相关的对象采用,就可以使用抽象类。如果要创建将由一些不相关对象采用的功能,就使用接口。
如果必须从多个来源继承行为,就使用接口。
如果知道所有类都会共享一个公共的行为实现,就使用抽象类,并在其中实现该行为。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值