• 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(),并在里面来实现深度克隆——人为去复制浅克隆复制不了数据。

  • 相关阅读:
    第三章-列表简介
    第二章—变量和简单数据类型
    CSS3转换
    maven项目报:An error occurred while filtering resources
    CSS基本知识和选择器
    Html
    算法(第四版)学习笔记(三)——归并排序
    算法学习笔记(二)——初级排序算法
    算法学习(一)——二分查找递归方法
    1003. 我要通过!(20)
  • 原文地址:https://www.cnblogs.com/flypea93/p/9149425.html
Copyright © 2020-2023  润新知