相信很多从事php开发工作的人员中,有不少在面试的时候都被问到过面向对象中的一些概念的理解。本人也不是什么大牛,只是在不断学习的过程中,总结一下常碰到的问题分享给大家。
1. 类的定义:使用class关键字加上类名定义。类可以用来实例化对象,实例化对象用关键字new加类名
2. 类中的成员:类中成员包括属性,方法,和类常量(类常量使用const定义,它的值必须是一个定值,不能是一个变量)
3. 既然类中有成员,那么我们就可以对成员进行访问,这就有了访问控制符public,protected,private。下面就来说说这三个关键字:
(1) public: 顾名思义公有,在属性或方法前面使用public限制的话,说明该成员可以在任何地方被访问。
(2) protected: 受保护,在属性或方法前面使用protected修饰的话,说明改成员可以被自身以及其子类和父类访问,即在继 承链内都可以被访问。
(3) private:私有, 私有成员只能被其定义所在的类访问。
类中的成员方法有两个比较特殊的:构造函数和析构函数。
构造函数:__construct(). 主要是用来在创建对象时,对对象进行初始化,给属性赋初始值。通常在类被实例化的时候被调用
析构函数:__destruct(). 当对象被销毁的时候被调用。
4. 用来修饰属性和方法的关键字还有一个static(静态),当属性或方法前使用static后,就说该成员为静态成员。静态成员的访问比较特殊,静态属性和静态方法都可以通过类来直接访问,静态方法也可以通过类实例化过来的对象访问,但是静态属性不可以。
5. 接口:接口中定义的方法不需要定义方法的内容,当类实现该接口时,该类必须实现接口中的所有方法,否则会报错。一个类可以实现多个接口,但是只能继承一个类。类实现接口使用implements关键字。
6. 对比抽象类(关键字abstract)和最终类(关键字final)。抽象类与最终类的最大区别是抽象类不能被实例化,只能被继承;最终类不能被继承,只能被实例化。
抽象类:如果一个类里面至少有一个方法被声明为抽象方法,那么这个类必须被声明为抽象类。抽象方法不能定义具体的功能,只能是一个方法名。当继承一个抽象类的时候,子类中必须定义父类中的所有抽象方法,并且这些方法的访问控制必须和父类中的一样或者更为宽松。
最终类:如果一个类被声明为final,则该类不能被继承,如果父类中方法被声明为final,则子类无法重写该方法。