作者:KisS汐唲 | 来源:互联网 | 2023-09-09 08:13
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 新的类名 来为引入的类定义一个别名。