0607-抽象类、抽象方法、接口、类的重载、类的自加载、对象的克隆

1.抽象类、抽象方法(abstract

正常定义类(方法)的前面,加上关键字:abstract,就构成抽象类(方法)。

抽象类:抽象类就是用来做父类的,可以用来规范一些类的共同特性,不能被实例化,子类继承了它的特性,这就是“规范作用”

抽象方法:抽象方法是一个没有方法体(也不含大括号)的方法定义“头”而已。例如:abstract  function  f1($x1, $y, $m);

抽象类抽象方法细节关系描述:

1.抽象方法只能存在于抽象类。

2.但,一个抽象类中,可以没有抽象方法——但通常意义不大。

3.子类继承自一个抽象类,则子类必须实现父类中的所有抽象方法,除非子类也继续作为抽象类

4.子类实现抽象父类的方法时,访问控制修饰符的范围不能降低,且方法的参数也须一致——其实这就是重写,所以要满足重写的要求。

 2.接口(关键词:interface、implements--实现 )

定义:更抽象的抽象类(方法全为抽象方法)就是接口。

因为接口中的方法都是抽象的,则下级类就必须:

1.要么实现该抽象方法(写出其方法体)

2.要么也声明为抽象方法——等待更下一级的类去实现。

一个类只能继承一个父类,但可以实现多个“上级接口”,语法形式:

   class  类A  extends  B  implements  接口1,接口2.... { 。。。类定义语句。。。}

一个接口同样可以继承另一个接口(也是单继承):

   interface  接口1  extends 接口2  {接口定义}

3.重载

在一个类中,有多个同名的方法,每个方法的参数不同而已。这种现象就称为“重载”。

参数不同可以是:数量个数不同,或类型不同,或顺序不同。

属性的重载:

如果某属性不存在,但在语法中使用如下情形,则会发生:

取值:$v1 = 对象->属性; ===>自动调用类中的__get()方法

赋值:对象->属性 = XX值; ===>自动调用类中的__set()方法

判断是否存在:isset(对象->属性;) ===>自动调用类中的__isset()方法

销毁:unset(对象->属性;) ===>自动调用类中的__unset()方法

前提都是:类中要预先定义好这些方法。

方法的重载:

当使用一个对象调用一个不存在的普通方法的时候,会自动去调用预先定义好的"__call"方法。

当使用一个对象(类)调用一个不存在的静态方法的时候,会自动去调用预先定义好的"__callStatic"方法。该方法必须带两个参数

几个魔术方法:

__get(), __set(),  __isset(), __unset(),  __call(),  __callstatic();

4.类的自动加载:使用一个类的时候,自动引入类文件

方法1:使用__autoload魔术函数

方法2:使用spl_autoload_register函数

5.克隆

浅克隆:只能克隆非对象非资源(php的默认),一个类的对象数据更改了,另一个类也会更改,克隆不完全。

深克隆:需要再写个方法把对象克隆一下

要想实现深克隆(一个对象的所有属性数据都彻底实现了“复制”),就需要对该对象类使用魔术方法:__clone(),并在里面来实现深度克隆——人为去复制浅克隆复制不了数据。

原文地址:https://www.cnblogs.com/flypea93/p/9149425.html