• php面向对象的封装、抽象和接口


    这次接着上一篇来讲;

    面向对象的三大特征,之前已经讲了1个了,现在讲后2个:封装、多态

    1.什么是封装?和pulic类似的访问修饰符分别有什么作用?

    所谓封装,就是类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行‘信息隐藏’(优点)。
    * 把对象的属性和行为结合成一个独立的相同单位,并尽可能隐藏对象的内部细节。

    封装是面向对象的特征之一,是对象和类概念的主要特性。

    * 封装的原则在软件上的反应是:
    要求使对象以外的部分不能随意存取对象的内部数据(属性),从而有效的避免了外部错误对它的‘交叉感染’。使软件错误能局部化,
    大大减少了查错和排错的难度
    * 封装实现的目的:
    * 隐藏一个类的实现数据
    * 防止对封装数据的未经授权的访问
    * 有利于保证数据的完整性
    * 便于修改,有利于增强代码的可维护性

     PHP中有三种访问修饰符,分别是: 
    public(公共的、默认) protected(受保护的) private(私有的) 

    它们可以分别用在类的属性和方法上(类的属性和方法统称为类的成员),用来修饰类成员的访问权限。 public(公共的、默认) 
    在PHP5中如果类没有指定成员的访问修饰符,默认就是public的访问权限。 

    当类的成员被声明为public的访问修饰符时,该成员能被外部代码访问和操作。
    private(私有的) 被定义为private的成员,对于类内部所有成员都可见,没有访问限制。对类外部不允许‘直接’访问。 
    protected(受保护的) protected稍微有点复杂,被声明为protected的成员,只允许该类的子类进行访问。

    举例:

    讲完了封装,现在我们来看看多态:

    * 所谓多态就是指一个类实例的相同方法在不同情形有不同表现形式。
    * 多态机制使具有不同内部结构的对象可以共享相同的外部接口。

    关于多态,就不得不说起 抽象和接口这两个概念了

    2.什么是抽象?抽象的关键字是什么?

    1)、抽象关键字 :abstract
    抽象就是无法确切的说明,但又有一定的概念或者名称;也可以指不代表任何具体事物的一种概念。

    * 抽象分为抽象类和抽象方法

    2)、 关于抽象类

    //抽象类的定义

    * 使用抽象关键字修饰的类就叫抽象类
    * 抽象类不一定需要有抽象方法,但是包含抽象方法的类一定是抽象类
    * 抽象类不能够实例化

    //抽象类的几个特点:
         1、不能被实例化,只能被继承
         2、继承的派生类当中要把所有抽象方法重载才能实例化

    3)关于抽象方法

    //抽象方法的定义
    * 使用abstract修饰的函数方法叫抽象方法
    * 抽象方法只有函数的声明部分,不包括实现部分,只要用分号代表出来
    * 继承了带有抽象方法的类必须实现抽象方法的定义

    //抽象方法的几个特点:
    1、类中至少有一个抽象方法
    2、抽象方法不允许有{}
    3、抽象方法前面必须要加abstract

    举例:

    3.什么是接口?接口的关键字以及用法?

    接口是一种特殊的抽象类,也可以看做是一个模型的规范。

    PHP接口(interface)的特点 
    1、在接口中的函数都是公共的抽象函数方法
    2、接口的方法是不能添加关键字,可省略public
    3、接口可以定义常量,但不能定义成员属性,常量的定义和用法和类中常量一样。 
    4、接口通常都是一组功能的集合
    5、接口也可以继承。
    * 接口是抽象方法和静态常量定义的集合
    * 实现了某个接口,必须实现该接口中的所有的抽象方法

    接口与抽象类大致区别如下:

    1. 一个子类如果 implements 一个接口,就必须实现接口中的所有方法(不管是否需要);如果是继承一个抽象类,只需要实现需要的方法即可。
    2. 如果一个接口中定义的方法名改变了,那么所有实现此接口的子类需要同步更新方法名;而抽象类中如果方法名改变了,其子类对应的方法名
    将不受影响,只是变成了一个新的方法而已(相对老的方法实现)。
    3. 抽象类只能单继承,当一个子类需要实现的功能需要继承自多个父类时,就必须使用接口。

    举例:

    加油,朝着梦想前进
  • 相关阅读:
    uniapp判断token多次登录问题
    vue强制刷新子组件到初始状态
    时间戳转化时间过滤器
    axios二次封装具有请求/响应拦截的http请求
    vue常见的工具函数
    解决npm i 初始化,core-js报错
    node环境变量配置
    scss基本使用
    Vue element-ui父组件控制子组件的表单校验
    antd-Calendar(日历)自动嵌入对应时间问题
  • 原文地址:https://www.cnblogs.com/scmy707248119-/p/7191307.html
Copyright © 2020-2023  润新知