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

PHP面向对象编程知识要点

13、final最终类

13、final最终类



如果某个类从业务逻辑的角度看,应该是最终的类别,不应该被继承了,此时就应该使用final关键字声明该类为 最终类 !

14、抽象类
14.1、定义



abstract类:也叫作抽象类,不能实例化对象,只能被继承

14.2、成员

抽象类中的成员:不仅包括抽象方法,还包括普通成员(非抽象方法、属性、常量等)。

14.3、作用

可以完成普通的继承,为其他的类提供公共的代码!

用于规定子类中必须要完成的方法成员,规定子类的方法结构,有时候为了保证完成一系列功能相似的多种操作类的结构一致,我们要求这些类都继承自相同的一个抽象类!

14.4、注意事项

继承抽象类的子类只有两种选择:

实现抽象父类中的没有实现父类中的

15、接口
15.1、定义:

接口不是类,接口是类的规范,类又是对象的规范!接口的名字也有一个约定俗成的做法,就是以大写的 I 开头

15.2、成员
接口interface成员:

接口常量:接口中的常量

抽象方法:和普通的抽象方法相似,只不过必须声明为 public ,且省略了关键字 abstract。这是因为接口中只存在抽象方法,所有省略了abstract

15.3、作用

是一种纯粹的规范或规定,规定该接口的下级类必须要实现的公共的方法!

15.4、注意事项
实现接口的子类只有两种选择:

实现接口中的所有抽象方法(完善方法体),作为普通类;

没有实现接口中的所有抽象方法,作为抽象类,被下一级子类继承实现;

15.5、接口和抽象类的比较

从逻辑和结构上看,接口可以看成是抽象类的一个 子集 ,都可以规定下级类的内部结构,只是接口里面只能有接口常量和公共抽象方法!

接口比抽象类还要 抽象 ,是一种纯粹的规范!接口甚至都不是类,是类的纯粹的规范!

PHP不支持多继承,但是支持多实现,也就是说,一个类可以同时实现多个接口!这也是接口和抽象类的最最本质的区别!

16、重载
16.1、重载的定义

重载指的是对不可访问的成员的处理!

不可访问有两种情况:

该成员不存在;
没有权限去访问(比如私有成员);

没有权限去访问(比如私有成员)

16.2、重载的分类
16.2.1、属性重载

__set(属性名, 属性值):一旦定义了__set方法,为不可访问的属性赋值的时候就会自动执行该方法。此时,处理权就交给用户自己了。这里可以设置是否允许用户从外界增加不存在的属性。

__get(属性名):一旦定义了__get方法,获取不可访问的属性的值时候,就会自动执行该方法。此时,处理权就交给用户自己了!

__unset(属性名):一般来说,可以通过unset函数删除对象的某个公开的属性,但是如果该属性是不可访问的,则会自动执行__unset方法进行处理!究竟是否可以删除成功,还是取决于__unset的内部实现!

__isset(属性名):如果该属性是不可访问的属性,判断这个属性是否存在的时候,会自动触发该方法的执行!

16.2.2、方法重载

__call(方法名, 参数数组):当调用一个不可访问的对象方法(非静态方法),会自动执行该魔术方法!

__callstatic(方法名, 参数数组):当调用一个不可访问的类方法(静态方法)的时候,会自动执行该魔术方法,需要在方法名的前面加上static。

17、魔术方法和魔术常量
17.1、魔术方法

你全都了解吗?

__construct()
__destruct()
__clone()
__sleep()
__wakeup()
__get()
__set()
__unset()
__isset()
__call()
__callstatic()
17.2、魔术常量
__CLASS__
__METHOD__
__FILE__
__DIR__
__LINE__
__FUNTION__
18、类与对象相关函数
class_exists()
interface_exists()
method_exists()
get_class()
get_parent_class()
get_class_methods()
get_class_vars()
is_object
19、命名空间
19.1、空间成员与子空间

空间成员:函数、类和常量

子空间:namespace A\B\C;表示创建一个名为C的子空间,并A空间和B空间也一起创建了!

19.2、空间成员的访问

非限定名称访问:只能访问本空间内的成员,不用指定空间名;

限定名称访问:从当前空间访问其子空间的时,可以使用限定名称访问!

语法形式:子空间名\成员名;

完全限定名称访问:直接从跟空间开始使用绝对路径访问;

20.3、空间引入

当一个文件 f1 中空间 A 载入到另一个文件 f2 中(B是该文件中的空间)的时候,在 f2 中使用空间时,就出现了空间引入的问题。

需注意的是,文件的引入是在代码执行阶段进行的,而 f2 中的 B 空间在引入之前命名,也就导致了 B 空间是默认的空间,当我们在引入语句后使用非限定成员访问时,会自动访问 f2 文件中的 B 空间。所以对引入空间的使用要较为慎重 ;

如果 B 空间和 A 空间没有关系,则在 f2 中使用 A 空间时,要用完全限定名称访问;

如果 B 空间是 A 空间的父空间,则在 f2 中使用 A 空间时,除了用完全限定名称访问,还可以使用限定名称访问;

20.4、空间类的引入

语法形式:use 空间名\类名 || use 空间名\类名 as 新的类名;

使用的时候,如果引入的类名和本文件中的类名相同,可以使用 use 空间名\类名 as 新的类名 来为引入的类定义一个别名。


   



推荐阅读
  • 使用Maven JAR插件将单个或多个文件及其依赖项合并为一个可引用的JAR包
    本文介绍了如何利用Maven中的maven-assembly-plugin插件将单个或多个Java文件及其依赖项打包成一个可引用的JAR文件。首先,需要创建一个新的Maven项目,并将待打包的Java文件复制到该项目中。通过配置maven-assembly-plugin,可以实现将所有文件及其依赖项合并为一个独立的JAR包,方便在其他项目中引用和使用。此外,该方法还支持自定义装配描述符,以满足不同场景下的需求。 ... [详细]
  • 在使用 Qt 进行 YUV420 图像渲染时,由于 Qt 本身不支持直接绘制 YUV 数据,因此需要借助 QOpenGLWidget 和 OpenGL 技术来实现。通过继承 QOpenGLWidget 类并重写其绘图方法,可以利用 GPU 的高效渲染能力,实现高质量的 YUV420 图像显示。此外,这种方法还能显著提高图像处理的性能和流畅性。 ... [详细]
  • 深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案
    深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案 ... [详细]
  • 开发日志:201521044091 《Java编程基础》第11周学习心得与总结
    开发日志:201521044091 《Java编程基础》第11周学习心得与总结 ... [详细]
  • 在C#编程中,设计流畅的用户界面是一项重要的任务。本文分享了实现Fluent界面设计的技巧与方法,特别是通过编写领域特定语言(DSL)来简化字符串操作。我们探讨了如何在不使用`+`符号的情况下,通过方法链式调用来组合字符串,从而提高代码的可读性和维护性。文章还介绍了如何利用静态方法和扩展方法来实现这一目标,并提供了一些实用的示例代码。 ... [详细]
  • Spring框架中枚举参数的正确使用方法与技巧
    本文详细阐述了在Spring Boot框架中正确使用枚举参数的方法与技巧,旨在帮助开发者更高效地掌握和应用枚举类型的数据传递,适合对Spring Boot感兴趣的读者深入学习。 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 本文探讨了如何利用Java代码获取当前本地操作系统中正在运行的进程列表及其详细信息。通过引入必要的包和类,开发者可以轻松地实现这一功能,为系统监控和管理提供有力支持。示例代码展示了具体实现方法,适用于需要了解系统进程状态的开发人员。 ... [详细]
  • 本文深入探讨了Java多线程环境下的同步机制及其应用,重点介绍了`synchronized`关键字的使用方法和原理。`synchronized`关键字主要用于确保多个线程在访问共享资源时的互斥性和原子性。通过具体示例,如在一个类中使用`synchronized`修饰方法,展示了如何实现线程安全的代码块。此外,文章还讨论了`ReentrantLock`等其他同步工具的优缺点,并提供了实际应用场景中的最佳实践。 ... [详细]
  • 本文介绍了如何利用ObjectMapper实现JSON与JavaBean之间的高效转换。ObjectMapper是Jackson库的核心组件,能够便捷地将Java对象序列化为JSON格式,并支持从JSON、XML以及文件等多种数据源反序列化为Java对象。此外,还探讨了在实际应用中如何优化转换性能,以提升系统整体效率。 ... [详细]
  • Java中不同类型的常量池(字符串常量池、Class常量池和运行时常量池)的对比与关联分析
    在研究Java虚拟机的过程中,笔者发现存在多种类型的常量池,包括字符串常量池、Class常量池和运行时常量池。通过查阅CSDN、博客园等相关资料,对这些常量池的特性、用途及其相互关系进行了详细探讨。本文将深入分析这三种常量池的差异与联系,帮助读者更好地理解Java虚拟机的内部机制。 ... [详细]
  • 本文是Java并发编程系列的开篇之作,将详细解析Java 1.5及以上版本中提供的并发工具。文章假设读者已经具备同步和易失性关键字的基本知识,重点介绍信号量机制的内部工作原理及其在实际开发中的应用。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 属性类 `Properties` 是 `Hashtable` 类的子类,用于存储键值对形式的数据。该类在 Java 中广泛应用于配置文件的读取与写入,支持字符串类型的键和值。通过 `Properties` 类,开发者可以方便地进行配置信息的管理,确保应用程序的灵活性和可维护性。此外,`Properties` 类还提供了加载和保存属性文件的方法,使其在实际开发中具有较高的实用价值。 ... [详细]
author-avatar
KisS汐唲
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有