PHP面试专栏正式上线,每周一、三、五更新,提供最优质最优质的PHP面试内容。PHP面向对象共考知识点有以下7点。我将从以下几点进行详细的介绍和讲解,帮助大家更好的应对PHP面试的面向对象知识点和考题。整篇面向对象文章的结构涉及的内容模块有:1、面向对象和面向过程的区别是什么?二、面向对象有什么特点?3.什么是构造函数和析构函数?4.什么是面向对象的作用域?5、PHP中有哪些神奇的方法?6.什么是对象克隆?7.this、self和parent有什么区别?8、抽象类和接口有什么区别和联系?9、PHP面向对象考试面试题解说关于PHP面向对象的内容将分三篇讲解完整版块内容。第一篇主要讲解一到四点的内容,第二篇主要讲解五到八点的内容,第三章的内容会围绕第九点进行讲解。以下文字内容均来自《PHP程序员面试笔试宝典》书籍,转载请保留出处:1、面向对象和面向过程的区别是什么?面向对象是当今软件开发方法的主流方法之一。它将数据和对数据的操作作为一个相互依赖的整体,即对象。抽象相似对象即类的共性,一个类中的大部分数据只能由该类的方法处理。类通过简单的外部接口与外界发生联系,对象之间通过消息进行通信。程序流程由用户在使用中决定。例如,从抽象的角度来看,人类有身高、体重、年龄、血型等特殊名称。人类可以用自己的思想工作、直立行走、吃饭和制造工具。人类只是一种抽象。它是一个不存在的实体,但所有具有人类群体的属性和方法的物体都被称为人。这个对象是一个实际存在的实体,每个人都是人类群体的一个对象。面向过程是一种以事件为中心的开发方式,自上而下依次执行,逐步细化。其程序结构按功能分为几个基本模块。这些模块形成一个树结构。它们之间的关系也比较简单,功能上也比较独立。每个模块一般由序列、选择和循环三个基本结构组成。已经决定了。比如五子棋,面向过程的设计思想是分析问题的第一步:第一步是开始游戏;第二步,先走;第三步,画图;百子;第六步,画图;第七步,评出优胜者;第八步,返回第二步;第九步,输出最终结果。用单独的功能实现上述每个步骤是一种面向过程的开发方法。具体来说,两者主要有以下几个方面的不同。1)出发点不同。面向对象是用一种常规的思维方式来处理客观世界的问题,强调将问题域的本质直接映射到对象以及对象与对象之间的接口。面向过程的方法则不然,它强调过程的抽象化和模块化,以过程为中心来构造或处理客观世界的问题。2)层次逻辑关系不同。面向对象方法是用计算机逻辑模拟客观世界中的物理存在,以对象的集合为基本单位处理问题,使计算机世界尽可能接近客观世界,使问题的处理更清晰、更直接,面向对象的方法就是用类层次来体现类之间的继承和发展。面向过程的方法处理问题的基本单元是能够清晰准确地表达过程的模块,利用模块的层次结构来概括模块或模块之间的关系和功能,抽象出问题所在将客观世界转化为计算机可以处理的过程。3)数据处理方式与控制程序方式不同。面向对象的方法将数据和相应的代码封装为一个整体。原则上其他对象不能直接修改其数据,即对象的修改只能通过自身的成员函数来完成。控制程序是通过“事件驱动”运行程序来激活和激活的。面向过程的方法是直接通过程序对数据进行处理,处理完成后可以显示处理结果。在控制程序模式下,程序按设计调用或返回,不能自由导航。被称为。4)分析设计不同于编码转换方法。面向对象的方法贯穿于软件生命周期的分析、设计和编码,是一个流畅的过程。从分析到设计再到编码,都用一个一致的模型来表示,即实现了无缝衔接。面向过程的方法强调分析、设计和编码之间按规则进行转换,实现分析、设计和编码在整个软件生命周期中的无缝衔接。二、面向对象有什么特点?面向对象的主要特征是抽象、继承、封装和多态。1)抽象。抽象就是忽略主题中与当前目标无关的那些方面,以便更充分地关注与当前目标相关的方面。抽象并不打算理解所有的问题,而只是选择其中的一部分,暂时不使用一些细节。抽象包括两个方面,一个是流程抽象,一个是数据抽象。2)继承。继承是一种链接类的层次模型,允许并鼓励类的重用,它提供了一种显式表达共性的方法。可以从现有类派生出新的对象类,这一过程称为类继承。新类继承了原类的特性,新类称为原类的派生类(子类),原类称为新类的基类(父类)。派生类可以继承其基类的方法和实例变量,子类可以修改或添加新的方法,使其更适合特殊需要。3)封装。封装是指将客观事物抽象成类,每个类保护自己的数据和方法。一个类只能让受信任的类或对象对自己的数据和方法进行操作,而隐藏不可信的信息。4)多态性。多态性是指允许不同类的对象响应同一个消息。多态性包括参数多态性和包含多态性。多态语言具有灵活、抽象、行为共享、代码共享等优点,很好地解决了应用函数的同名问题。整理了一篇《PHP和MySQL面试中我最爱考的10道题》,关注公众号:《六一编程库》,回复:“10”,我发给你。3.什么是构造函数和析构函数?1.构造函数在PHP5之前的版本中,构造函数的名称必须与类的名称相同,但是从PHP5开始,开发者可以定义一个名为__construct的方法作为构造函数。构造函数的作用是在类实例化的时候自动调用,所以构造函数主要用来做一些初始化工作。使用__construct作为构造函数名的一个好处是,当类名改变时,不需要修改构造函数的名称。它的声明形式是void__construct([mixed$args[,$...]])在C++语言中,子类的构造函数会隐式调用父类的无参构造函数。但是在PHP中,子类的构造函数并不会隐式调用父类的构造函数。开发者需要通过parent::__construct()显式调用父类的构造函数。当子类没有定义构造函数时,它会继承父类的构造函数,但前提是父类的构造函数不能定义为private。使用示例如下:程序运行结果为BaseconstructorBaseconstructorSubconstructor从上面的解释可以发现从PHP5开始多了一个构造函数定义方法。为了实现不同版本PHP代码的兼容,如果在PHP5类中找不到__construct()函数,也没有从父类继承,那么它会尝试寻找老式的构造函数(一种带有与班级同名)。这种兼容方法存在一个风险:当PHP5之前的版本开发的类中已经有一个名为__construct()的方法但被用于其他用途时,PHP5类会认为这是一个构造函数,所以当这个方法被自动在类被实例化时执行。从PHP5.3.3开始,与类名同名的方法不再用作命名空间中的构造函数。此更改不会影响不在命名空间中的类。2.析构函数析构函数是PHP5引入的。它的作用正好与调用时机和构造函数相反。它在对象被销毁时自动执行。析构函数__destruct()的结构如下:function__destruct(){/*类初始化代码*/}需要注意的是,析构函数是系统自动调用的,所以不需要参数。默认情况下,系统只释放对象属性占用的内存,不会销毁对象内部申请的资源(例如打开文件、创建数据库连接等),使用析构函数后执行代码要清除的对象这些资源在对象内部分配(关闭文件、断开与数据库的连接)。与构造函数类似,如果要在子类中调用父类的析构函数,需要显式调用:parent::__destruct()。如果子类没有定义析构函数,它会继承父类的析构函数。当不再引用对象时调用析构函数。如果要显式销毁一个对象,可以不给指向该对象的变量赋值,通常将该变量赋值为NULL或者使用unset()函数。示例代码如下:";}}$p=newdes();/*实例化类*/echo"programStart
";取消设置($p);/*Destroyvariable$p*/echo"Endofprogram";?>四、面向对象的作用域有哪些?在PHP5中,类的属性或方法主要有三种作用域:public、protected、private。它们的区别如下:1)public(公共类型)表示全局的,可以在类的内部、外部和子类中访问。默认访问权限是public,即如果一个方法没有被public、protected或private修饰,那么它的默认作用域就是public。2)protected(受保护类型)表示受保护,只有本类或子类可以访问。在子类中,可以通过self::var或self::method访问,也可以通过parent::method调用父类中的方法。在类的实例化对象中,不能通过$obj->var访问受保护类型的方法或属性。3)private(私有类型)表示私有,只能在本类内部使用。该类型的属性或方法只能在本类中使用,私有类型的属性和方法不能在本类、子类或子类的实例中调用。通知:PHP面试内容面向对象(二)将于本周三(2019.2-13)更新。以上内容节选自本书《PHP程序员面试笔试宝典》,已在天猫、京东、当当网等电商平台销售。更多PHP相关面试知识和考题,请关注公众号获取:六一编程库本文有任何问题或建议可以留言,我们会不断改进,追求完美。感谢您的支持。
