DAY22

  第12章 接口

12.1 看一个实际的需求

 

12.2 接口的基本介绍

  •  所谓接口:就是将一些抽象方法封装到一起,在某个类需要使用时,只需要实现该接口就可以, 说的实现接口就是指将该接口中的所有的抽象方法都实现了。
  •  基本语法

interface 接口名称{

常量;

   方法;

}

几点说明

(1) interface 是关键字,不能够修改,规定好 。

(2) 接口名称有命名规范是: iXxxxXxxx , 首先以小写的i开头. 后面使用大驼峰命名规则

(3) 接口中的方法,都是抽象方法, 但是不需要使用abstract 去修饰

(4) 接口中,不能有普通的成员属性,但是可以有常量.

12.3 使用接口的好处

12.4 快速入门案例

 

12.5 接口的最佳实践案例

  •  使用接口的方式来模拟一下下面的运用场景

  • 走代码

 

 12.6 接口的应用场景

 

总结: 当我们需要定义一些规范(方法)时,可以将这些方法封装到接口中 ,然后让其他的类来实现该接口即可.

12.7 接口的细节讨论

(1) 接口不能被实例化

(2) 接口中所有的方法都不能有主体, 即接口中的方法都是抽象方法.

(3) 一个类可以实现多个接口,逗号隔开

举例说明:

(4) 接口中可以有属性,但只能是常量 ,默认是public, 但不能用public 显式修饰

(5) 一个接口不能继承其它的类,但是可以继承别的接口

 

12.8 类定义的进一步完善

 

 12.9 继承类vs 实现接口

 

  • 总结一下

(1) 实现接口可以看做是对php单继承机制的补充

(2) 实现接口可以在不打破继承的层级关系的前提下,对类的功能进行扩展


     第13章 final关键字

13.1 基本介绍

当程序员不希望某个成员方法被子类重写时,我们可以将该方法修饰为final 方法.

当程序员不希望某个类被继承,我们可以将该类修饰为final .

final "最终"

 

13.2 基本语法

final 类名{

  final 访问修饰符 function 方法名(){

  //函数体

  }

}

 

13.3 快速入门案例

总结

(1) //如果我们不希望子类去重写attack方法, 使用final 修饰即可

(2) //如果我们不希望子类来继承某个类, 则使用final修饰该类即可

 

13.4 final 的使用细节讨论

(1) final不能够修饰成员属性

(2) final 方法不能被重写,但可以被继承

 

(3) 一般来说,final 类中不会出现final 方法,因为final类都不能被继承,也就不会去重写override final类的方法了

(4) final 类 是可以被实例化的

 


  

   第14章 类常量(const关键字)

14.1 为什么需要使用当类常量

在某些情况下,程序员可能有这样的需求:

当不希望一个成员变量被修改,希望该变量的值是固定不变的。这时可以用const 去修饰该成员属性,这样这个属性就自动成为常量 , 比如所得税率, 数学中的圆周率等

14.2 类常量的基本语法

类常量是在类中定义的.

class  类名{

  const 常量名 = 初始值;

}

说明

(1) const 是关键字,规定好的而不能修改.

(2) 常量名的规范是 XXX_YYY , 全部大写,然后使用下划线间隔

(3) 类常量都是public , 但是我们不要使用public 去修饰.

 14.3 快速入门案例

 //计算公司所得税的案例.

14.4 关于类常量的使用细节说明

(1) 常量名一般字母全部大写 : TAX_RATE ,中间可以有下划线 TAX_RATE

(2) 在定义常量的同时,必须赋初值, 比如 const TAX_RATE=1.1

(3) const关键字前不能用public/protected/private修饰。默认是public

(4) 如何访问常量

在类的内部访问:   类名::常量名    self::常量名   接口::常量名

在类的外部访问:  类名::常量名  接口名::常量名   

(5)常量的值在定义的时候就初始化,以后就不能修改

(6) 常量可以被子类继承

 

(7) 一个常量是属于一个类的,而不是某个对象的

(8) 关于常量可以是什么数据类的讨论

结论: 常量可以是 基本数据类型(int, float , bool, string), 还是可以是 array ,但是不能是对象。

 

(9) 类常量可以在类中,类的外部和其它普通函数中使用

 


    

     第15章  PHP面向对象编程的相关技术

 基本: php面向对象编程的各个知识点都过一下.

15.1 对象克隆技术和分析

15.2 对象遍历[了解,应付笔试]

  •  看看如何对对象进行遍历: 所谓对象的变量,指的是对某个对象的属性进行遍历.
  • 举例

在类的外部对对象进行遍历, 这时我们只能遍历到对象的public 属性.

 

15.3 php的内置标准类

   看一个具体的需要: 如果,我们希望把一些数据,以对象的属性的方式存储,同时我们又不想定义一个类,可以考虑使用 PHP内置标准类 stdClass [standard标准]

        php的内置标准类 stdClass , 这个是系统默认提供,不需要程序员去创建,而是直接使用就可以.

案例说明:

15.4 数据类型转对象和对象转数组的说明

 在我们的开发中,有时会看到有人将数组或者基本数据类转成对象,那么这个是怎么回事?

  • 举例说明

 

15.5 对象序列化和反序列化

  •  基本介绍

所谓对象序列化是指: 将一个对象转换成一个字符串,这个字符串包括 属性名,属性值,属性类型, 和该对象对应的类名。简单的说明就把一个对象的数据和数据类型转成字符串.

  •  看一个实际的需求

我要求同学们讲一个对象保存到文件中.(freeze 冷冻)-对象序列化.

 

  •  反序列化

所谓反序列化就是指,将一个序列化的字符串,重新恢复成对应的对象.

 

说明

(1) 如果我们希望正确的操作反序列化对象,则需要引入该对象的类定义

  •  对象序列化和反序列化的细节讨论

(1) 序列化的作用在哪些地方

  • 对象序列化利于对象的保存和传输
  • 可以让多个文件共享对象,而且我们将序列化后的对象保存到文件中,还可以达到在不同的时间段操作该对象.

(2) serialize() 函数会检查类中是否存在一个魔术方法 __sleep()如果存在,该方法会先被调用,然后才执行序列化操作。此功能可以用于清理对象,并返回一个包含对象中所有应被序列化的变量名称的数组。如果该方法未返回任何内容,则 NULL 被序列化,并产生一个 E_NOTICE 级别的错误

代码说明:

(3) 与之相反, unserialize() 会检查是否存在一个 __wakeup()方法。如果存在,则会先调用 __wakeup 方法,预先准备对象需要的资源。

__wakeup() 经常用在反序列化操作中,例如重新建立数据库连接,或执行其它初始化操作。

代码说明:

15.6 类与对象的相关函数

 在面向对象编程中,有一系列的函数,可以来对类和对象以及成员方法进行操作。我们重点讲解5个,其它的函数就请同学们自己去看一下即可.

 

代码举例说明:

15.7 traits 的讲解(重点)

  •  看一个实际的需求

 

  • 代码实现

 

 

  •  traits技术的细节说明

 


 

   第16章  反射技术

16.1 当我们echo $对象时,输出该对象的属性,成员方法等等信息

  •  举例说明:

16.2 反射机制的基本介绍

 PHP 5 具有完整的反射 API,添加了对类、接口、函数、方法和扩展进行反向工程的能力。 此外,反射 API 提供了方法来取出函数、类和方法中的文档注释。

 

16.3 反射机制的使用场景

  1. 写底层框架(比如tp框架有一个控制器调度原理)
  2. 扩展类的功能
  3. 管理大量的未知类

 16.4 看一个需求-一会我们一起搞定他

 

 16.5 我们看一个简单的案例-反向代理调用 

  •   使用反射机制代理带有某个对象的方法

 

  •  代码说明

 

16.6 反射机制的综合小练习-tp的控制器调度原理

 走代码:

 

 

16.7 反射练习

 

 

16.8 小结:

 

原文地址:https://www.cnblogs.com/qianjilou/p/6372117.html