山山未迟

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

image

 

回顾

面向对象:自动加载(__autoload),类常量访问(范围解析操作符),静态(属性和方法:self)

设计模式:单例模式(三私一公),工厂模式

面向对象三大特性:封装,继承和多态(PHP不支持)

PHP继承:extends(对象继承:属性和非私有方法)

PHP继承

方法重写

子类拥有与父类同名的方法。

clip_image002

除了私有的属性和方法之外,系统一律都是去子类中查找属性和方法,但是如果对应的属性和方法是私有的,那么系统一定要去判断$this所代表的上下文(类环境),在哪个类就访问哪个类的私有属性和方法。

重写的原则:被重写的方法的访问权限一定要比原来的方法的权限要大(Open)。

clip_image004

PHP继承链

在php中不支持一个类继承自多个父类。

在有些语言中 可以实现多继承:class A extends B,C(PHP中不行)

clip_image006

PHP中可以通过继承链(链式继承)来实现子类继承多个“父类”。

clip_image008

静态在继承中的使用

静态的东西属于类,类其实在结构有类似继承概念,所以静态的内容也可以遵循继承的传统去跨类使用。

clip_image010

parent关键字

如果子类中重写了父类的方法,那么父类的方法就不再会被调用,但是有时候需要父类的方法也执行,就需用使用parent关键字:

在被重写的方法之内:parent::父类的同名方法()

clip_image012

特殊类

有时候不希望自己写的类被别人继承,因为继承就有可能破坏类的结构。

Final类

final类又叫做最终类,指的是使用final 关键字修饰的类,不可以被其他类继承。

clip_image014

final关键字还能修饰方法,表示被修饰的方法不能被子类重写。

clip_image016

final类的意义:不可以继承,防止类结构被破坏

抽象类

有些类不能够被实例化,只能被继承。

抽象类是使用abstract关键字修饰的类。

clip_image018

抽象类只能被继承

clip_image020

abstract关键字可以用在方法上;表示当前方法是抽象方法,抽象方法不能有方法体(大括号)

clip_image022

抽象方法必须被子类实现:重写并添加方法体

clip_image024

实现抽象类的抽象方法

clip_image026

继承抽象方法:子类也必须是抽象类

clip_image028

一个拥有抽象方法的类一定是抽象类(必须显示的对类使用关键字abstract)

clip_image030

抽象类的意义:抽象类用于规范下面的子类里面所拥有的方法的名字

如果项目较大,有可能使用抽象类,如果项目很小或者说不需要那么多规范,就不怎么使用抽象类。

抽象类中可以拥有普通类中任何的类成员,但是不能使用私有的访问修饰限定符(private)

clip_image032

接口

接口分为很多种

应用型接口:一种可以允许外部使用的入口

数据型接口:用来规范外部去实现某些功能的方式(结构规范)

定义接口

语法:interface 接口名字{//接口体}

clip_image034

接口体

接口体也称之为接口成员,指的是在接口中可以定义的内容。

在接口中,只能有方法和常量,而且方法必须是抽象(不需要abstract关键字:没有方法体)的,而且只能public修饰。

clip_image036

接口不能被实例化,接口也不能被“继承”,接口只能被实现:implements

实现接口

实现接口值:用类去实现接口,必须要实现接口中的所有的抽象方法。

clip_image038

接口意义

与抽象类一样,用来规范底层的类的结构。比抽象类更加严格的规范结构。接口是一种纯粹用于规范的一种结构。

接口只有在团队比较大,分支比较多的情况下,用于规范整个团队,保证内部的不同分支下的结构相同。

接口的特殊使用

接口可以多实现,一个类可以同时实现多个接口

class 类名 implements 接口1,接口2,…{}

clip_image040

接口可以继承接口:interface A extends B{} //B是接口

clip_image042

常见的面试题

1. 抽象类是不是类?

抽象应该理解为是类,但是不能被实例化的类。(用的是关键字class)

2. PHP是否支持多继承?如何模拟?

PHP不支持多继承,但是可以用链式继承来模拟实现多继承。

2. 接口是不是类?接口是不是抽象类?

接口不是类,接口是interface,而类是class;接口也不是抽象类

3. 接口能不能被继承?

接口只能被类实现,但是接口是可以被接口继承的。

类相关常用的方法

class_exists:判断类在内存中是否存在,用于在类的加载之前进行数据判断

clip_image044

interface_exists:判断接口是否存在

method_exists:判断方法是否存在,只要方法存在,跟方法所有的访问修饰限定符没有关系

clip_image046

get_class:得到对象类名

clip_image048

get_parent_class:得到父类名,获取当前对象对应的类的上级类的类名,如果上级也是继承自其它类,则获取不到。(只能获取父类名)

clip_image050

posted on 2016-04-21 23:05  山山未迟  阅读(254)  评论(0编辑  收藏  举报