热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php面向对象编程-oop的3大特征(封装-继承-多态)

在面向对象编程语言中,并不是所有的面向对象语言都有类的概念。传统的oop语言中存在类的概念

在面向对象编程语言中,并不是所有的面向对象语言 都有类的概念。传统的oop语言中存在类的概念。

类:其实用来抽象对象。 对某类事物, 下个定义,规定了其有哪些属性和能力(方法)。

抽象:将现实或者逻辑世界实体, 变成 编程设计语言的 对象的过程。 也可以称作是 封装的过程。 将某些数据和某些操作制作成一个统一的整体(对象)

OOP的三大特征:

封装:

定义类的过程。

尽量使用 私有化成员,如果用户需要操作,则应该提供相应的操作接口完成。

oop编程

继承:

如果oop编写中,出现了 属性 与 方法的重叠,将重复代码提取,形成一个对象,然后让需要使用重复代码的对象,继承自这个对象。

多态:

一个方法成员多种形态。

php学习博客

注意:以上代码是不能执行的, 只是用来模拟 一个方法的不同形态。


继承:

面向对象内 继承 指的是 对象继承自另一个对象,可以将另一个对象内的方法和属性全部拿过来为自己使用。

在语法上,继承使用 类 来完成。

使用 关键字 extends 来完成 类 之间的继承。

再使用 实例化 就可以得到一个继承的对象。

继承

这样  我们通过 D 类 实例化的对象 就拥有了 C类对象的所有属性。

php blog

方法也可以继承,

但是继承 并不是指 将父类的代码复制到子类中,而是说明在父类与子类之间 维护了一条关系,通过这个关系 达到成员继承的目的。

在继承时的成员控制:

Public 公共的 所有地方都可以被访问(本类内,父类类,子类类,类外)

Private 私有的 本类内可以被访问(本类内)

Protected, 指的是在整个类继承链内,可以被访问。(本类,父类,子类)

其中 :

私有的成员 不能被继承, 但是可以在子类内被访问。

受保护的成员可以被继承,但只能在类内访问

公共的成员 可以被继承,并且类内 类外都可以。

注意:访问控制 控制的是 对象级别的  还是 类级别 的访问?

是站在 类的角度去 衡量 一个成员是否能被访问到,而不是 站在对象的角度。因为,同一个属性 有时可以被访问,有时不能被访问,取决于访问代码的位置。

小技巧,

如果一个类不涉及到继承 就尽量使用 private 控制成员权限

如果涉及到继承, 就会尽量使用 protected 控制权限。

#p#oop三大特征-继承使用的细节#e#

继承时 如果出现冲突 应该怎么处理?

成员名称的冲突

如果出现成员冲突,则子类会重写(override)父类的代码。

继承细节

如果子类中找不到,则会去父类查找:

php 学习博客

访问权限的冲突,

如果名称相同,但是访问控制不同 ,是如何处理的?

在继承的情况下 要求同名的成员的访问级别, 子类的级别 应该 高于(强于) 父类的级别。如果父类的为 protected 子类的应该是 protected 或者 public。

Parent

如果我们需要在类中访问父类的同名的成员的话,需要使用parent关键字来代替父类。从而访问父类资源(静态方法,方法,静态属性,常量).

例如 访问父类的构造方法:

parent

Self::   代替本类

Php的类继承 是 单继承,指的是,一个类只能通过继承另外一个类,不能同时直接继承多个类。

继承的使用

继承在平时开发中的使用:

一个项目多张表,管理表,对每个表进行增删改查,针对每个表的操作,都定义成一个类的话。可以让他们都继承一个基类(db类)

php 博客

#p#oop三大特征-final类-抽象类-接口#e#

不能被继承的类。

不能被继承的 称之 Final类,定义的方式非常简单  class前增加 final关键即可。

final类

继承时 会 出错。

抽象类 

Final关键的 还可以写到 方法前。

说明这个方法不能被重写。但是所在类可以被继承。

abstract

只能被继承的类。

不能实例化对象 只能被别的类来继承。

这种类 称之为  抽象类 使用关键字  abstract来实现。

Abstract class 类名{}

抽象类

通常 会在抽象类中,定义抽象方法(只有方法名,没有方法体的方法)。规定 继承这个抽象类的子类内,应该必须有哪些方法,换句话说,就是继承抽象类的子类必须实行该抽象类的所有抽象方法。

通常会在 同一类操作的不同介质之间,例如(同样的数据库操作,但是不同的数据库类型),采用抽象类的形式 规定 不同的操作介质的操作接口应该一致:

注意,抽象类内,除了抽象方法外还可以存在 其他的非抽象方法,和属性的定义。

学习php

由于抽象类也属于类的范畴,但是也不能做多继承。 不能使用多个类 来规定 某一个类的内容。

接口:interface

专门用来规定类的结构的。它 可以同时使用多个接口去规定一个类的结构。

接口的定义:


Interface 接口名 {
接口成员
}
接口成员:常量 和 方法
接口的使用,
接口需要使用 类来实现 才能有意义:
Class 类名 implements 接口名列表 {
类成员,必须实现接口内的不完整的方法才可以。
}


oop-接口

Php中是否支持多继承?

如何模拟多继承?

可以使用接口技术 模拟。

接口和接口之间可以相互实现么?

可以互相继承。使用extends关键字。

接口是不是类?是不是抽象类?都是抽象方法的类?

接口不是类,不是抽象类。但是可以理解成 全都是抽象方法的抽象类。


推荐阅读
  • 小编给大家分享一下如何移除URL中的index.php,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收 ... [详细]
  • 本文详细介绍了如何在PHP中删除数组中的指定元素、第一个元素和最后一个元素,并提供了具体的代码示例和相关函数的使用说明。 ... [详细]
  • 工作后体重逐渐增加,尽管尚未达到令人担忧的程度,但对于热爱运动的人来说,这一变化难以接受。经过长时间的考虑,我决定重新制定减重计划,以恢复最佳的身体状态。 ... [详细]
  • 本文探讨如何配置 Nginx 以将传入请求反向代理到运行在本地绑定端口上的 Docker 容器,并解决常见的路径重定向问题。 ... [详细]
  • 12月16日JavaScript变量、函数、流程、循环等***线上九期班
    12月16日JavaScript变量、函数、流程、循环等***线上九期班 ... [详细]
  • 卫青与汉武帝的君臣关系及家族命运
    本文探讨了卫青与汉武帝之间的特殊关系,以及卫青去世后其家族的命运。卫青不仅是汉武帝的重要将领,还通过婚姻关系成为皇亲国戚。然而,卫青去世后,其家族并未立即遭到灭顶之灾,而是逐渐因政治风波受到牵连。 ... [详细]
  • 如何在AE中创建裂变式加载动画
    本文将详细介绍如何使用Adobe After Effects (AE) 制作一个裂变式加载动画。通过简单的步骤,您可以轻松创建出引人注目的转圈式加载效果。 ... [详细]
  • 本文详细介绍了如何在PHP中进行数组删除、清空等操作,并提供了在Visual Studio Code中创建PHP文件的步骤。 ... [详细]
  • 探索新一代API文档工具,告别Swagger的繁琐
    对于后端开发者而言,编写和维护API文档既繁琐又不可或缺。本文将介绍一款全新的API文档工具,帮助团队更高效地协作,简化API文档生成流程。 ... [详细]
  • 实现自定义组件的多值v-model双向绑定
    探讨如何在自定义组件中实现多个输入框与父组件数据的动态双向绑定,确保组件内部多个值的变化能实时反映到父组件的数据中。 ... [详细]
  • 本文深入解析宋代诗人苏轼的《催试官考较戏作》,探讨其诗中的意境、意象及艺术特色,同时提供详细的译文,帮助读者更好地理解这首经典之作。 ... [详细]
  • 本文详细介绍了在不同操作系统中查找和设置网卡的方法,涵盖了Windows系统的具体步骤,并提供了关于网卡位置、无线网络设置及常见问题的解答。 ... [详细]
  • 使用Nginx反向代理实现多域名端口映射
    本文介绍如何通过配置本地hosts文件和Nginx反向代理,实现多个虚拟域名的端口映射,使用户可以通过标准HTTP端口80访问不同后端服务。 ... [详细]
  • 本文探讨了在构建应用程序时,如何对不同类型的数据进行结构化设计。主要分为三类:全局配置、用户个人设置和用户关系链。每种类型的数据都有其独特的用途和应用场景,合理规划这些数据结构有助于提升用户体验和系统的可维护性。 ... [详细]
  • 历经三十年的开发,Mathematica 已成为技术计算领域的标杆,为全球的技术创新者、教育工作者、学生及其他用户提供了一个领先的计算平台。最新版本 Mathematica 12.3.1 增加了多项核心语言、数学计算、可视化和图形处理的新功能。 ... [详细]
author-avatar
手机用户2502917981
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有