1、面向对象与面向过程有什么区别?
面向过程是一种以事件为中心的开发方法,就是自顶向下顺序执行,逐步求精,其程序结构是按功能划分为若干个基本模块,这些模块形成一个树状结构,各模块之间的关系也比较简单,在功能上相对独立,每一模块内部一般都是由顺序、选择和循环三种基本结构组成,其模块化实现的具体方法是使用子程序,而程序流程在写程序时就已经决定
面向对象是当今软件开发方法的主流方法之一,它是把数据及对数据的操作方法放在一起,作为一个相互依存的整体,即对象
2、面向对象有什么特征
面向对象的主要特征有抽象、继承、封装和多态。
1)抽象。抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
2)继承。继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了-种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类) ,而原始类称为新类的基类(父类) 。派生类可以从它的基类那里继承方法和实例变量,并且子类可以修改或增加新的方法使之更适合特殊的需要。
3)封装。封装是指将客观事物抽象成类,每个类对自身的数据和方法实行保护。类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的信息进行隐藏。
4)多态。多态是指允许不同类的对象对同一消息做出响应。多态包括参数化多态和包含多态。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好地解决了应用程序函数同名问题.。
3、抽象类和接口的概念以及区别?
抽象类:它是一种特殊的,不能被实例化的类,只能作为其他类的父类使用。使用abstract关键字声明。
接口它是一种特殊的抽象类,也是一个特殊的类,使用interface声明。
(1)抽象类的操作通过继承关键字extends实现,而接口的使用是通过implements关键字来实现
(2)抽象类中有数据成员,可以实现数据的封装,但是接口没有数据成员。
(3)抽象类中可以有构造方法,但是接口没有构造方法。
(4)抽象类的方法可以通过private, protected, public关键字修饰(抽象方法不能是private) ,而接口中的方法只能使用public关键字修饰。
(5)一个类只能继承于一个抽象类,而一个类可以同时实现多个接口。
(6)抽象类中可以有成员方法的实现代码,而接口中不可以有成员方法的实现代码。
4、Sthis和self, parent这三个关键词分别代表什么?在哪些场合下使用?
$this 当前对象
self当前类
parent当前类的父类
$this在当前类中使用,使用->调用属性和方法。
self也在当前类中使用,不过需要使用::调用
parent在类中使用
5、常用的魔术方法有哪些?
construct()实例化类时自动调用。
destruct()类对象使用结束时自动调用。
set()在给未定义的属性赋值的时候调用。
get()调用未定义的属性时候调用。
isset()使用isset()或empty()函数时候会调用。
unset()使用unset()时候会调用。
sleep()使用serialize序列化时候调用。
wakeup()使用unserialize反序列化的时候调用。
call()调用一个不存在的方法的时候调用。
callStatic()调用一个不存在的静态方法是调用。
toString()把对象转换成字符串的时候会调用。比如echo.
invoke()当尝试把对象当方法调用时调用
setstate()当使用varexport()函数时候调用。接受一个数组参数。
clone()当使用clone复制一个对象时候调用