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

Posted @Kerry~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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. 一个类可以同时实现多个接口,但一个类只能继承于一个抽象类。

抽象类还是接口

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

以上是关于PHP接口抽象类对象类各自定义的主要内容,如果未能解决你的问题,请参考以下文章

PHP 面向对象程序设计(oop)学习笔记 - 抽象类对象接口instanceof 和契约式编程

代码学习PHP面向对象之抽象类与接口

接口与抽象类的应用(包括各自设计模式)

PHP面向对象之抽象类

PHP 面向对对象基础(接口,类)

php学习笔记 面向对象中[接口]与[多态性]的应用