面向对象:自动加载(__autoload),类常量访问(范围解析操做符),静态(属性和方法:self) php
设计模式:单例模式(三私一公),工厂模式 面试
面向对象三大特性:封装,继承和多态(PHP不支持) 设计模式
PHP继承:extends(对象继承:属性和非私有方法) this
子类拥有与父类同名的方法。 设计
除了私有的属性和方法以外,系统一概都是去子类中查找属性和方法,可是若是对应的属性和方法是私有的,那么系统必定要去判断$this所表明的上下文(类环境),在哪一个类就访问哪一个类的私有属性和方法。 3d
重写的原则:被重写的方法的访问权限必定要比原来的方法的权限要大(Open)。 对象
在php中不支持一个类继承自多个父类。 blog
在有些语言中 能够实现多继承:class A extends B,C(PHP中不行) 继承
PHP中能够经过继承链(链式继承)来实现子类继承多个“父类”。 接口
静态的东西属于类,类其实在结构有相似继承概念,因此静态的内容也能够遵循继承的传统去跨类使用。
若是子类中重写了父类的方法,那么父类的方法就再也不会被调用,可是有时候须要父类的方法也执行,就需用使用parent关键字:
在被重写的方法以内:parent::父类的同名方法()
有时候不但愿本身写的类被别人继承,由于继承就有可能破坏类的结构。
final类又叫作最终类,指的是使用final 关键字修饰的类,不能够被其余类继承。
final关键字还能修饰方法,表示被修饰的方法不能被子类重写。
final类的意义:不能够继承,防止类结构被破坏
有些类不可以被实例化,只能被继承。
抽象类是使用abstract关键字修饰的类。
抽象类只能被继承
abstract关键字能够用在方法上;表示当前方法是抽象方法,抽象方法不能有方法体(大括号)
抽象方法必须被子类实现:重写并添加方法体
实现抽象类的抽象方法
继承抽象方法:子类也必须是抽象类
一个拥有抽象方法的类必定是抽象类(必须显示的对类使用关键字abstract)
抽象类的意义:抽象类用于规范下面的子类里面所拥有的方法的名字
若是项目较大,有可能使用抽象类,若是项目很小或者说不须要那么多规范,就不怎么使用抽象类。
抽象类中能够拥有普通类中任何的类成员,可是不能使用私有的访问修饰限定符(private)
接口分为不少种
应用型接口:一种能够容许外部使用的入口
数据型接口:用来规范外部去实现某些功能的方式(结构规范)
语法:interface 接口名字{//接口体}
接口体也称之为接口成员,指的是在接口中能够定义的内容。
在接口中,只能有方法和常量,并且方法必须是抽象(不须要abstract关键字:没有方法体)的,并且只能public修饰。
接口不能被实例化,接口也不能被“继承”,接口只能被实现:implements
实现接口值:用类去实现接口,必需要实现接口中的全部的抽象方法。
与抽象类同样,用来规范底层的类的结构。比抽象类更加严格的规范结构。接口是一种纯粹用于规范的一种结构。
接口只有在团队比较大,分支比较多的状况下,用于规范整个团队,保证内部的不一样分支下的结构相同。
接口能够多实现,一个类能够同时实现多个接口
class 类名 implements 接口1,接口2,…{}
接口能够继承接口:interface A extends B{} //B是接口
常见的面试题
1. 抽象类是否是类?
抽象应该理解为是类,可是不能被实例化的类。(用的是关键字class)
2. PHP是否支持多继承?如何模拟?
PHP不支持多继承,可是能够用链式继承来模拟实现多继承。
2. 接口是否是类?接口是否是抽象类?
接口不是类,接口是interface,而类是class;接口也不是抽象类
3. 接口能不能被继承?
接口只能被类实现,可是接口是能够被接口继承的。
class_exists:判断类在内存中是否存在,用于在类的加载以前进行数据判断
interface_exists:判断接口是否存在
method_exists:判断方法是否存在,只要方法存在,跟方法全部的访问修饰限定符没有关系
get_class:获得对象类名
get_parent_class:获得父类名,获取当前对象对应的类的上级类的类名,若是上级也是继承自其它类,则获取不到。(只能获取父类名)