PHP面向对象简介

面向对象就是将要处理的问题抽象为对象,然后通过对象的属性和行为来解决对象的实际问题。我们通常所说的面向对象准确的说应该叫面向对象编程(OOP),它是面向对象的一部分。

面向对象主要分为三个部分,如下所示:
  • 面向对象分析(Object Oriented Analysis,OOA);
  • 面向对象设计(Object Oriented Design,OOD);
  • 面向对象编程(Object Oriented Programming,OOP)。

本节我们主要介绍的是面向对象编程。

什么是面向对象编程

面向对象编程(Object-Oriented Programming,OOP)是一种编程思想,起源于 20 世纪 60 年代,直到 20 世纪 90 年代才成为应用软件开发的主流,并且逐渐从应用软件领域过渡到了 Web 领域。

在很多现代计算机语言中都有面向对象编程的概念,在不同的计算机语言中,这一思想所表现的内容丰富程度是不完全相同的,例如,Java 语言从一开始就设计成面向对象的编程语言,可以说面向对象就是其本质内涵。

面向对象就是将要处理的问题抽象为对象,然后通过对象的属性和行为来解决对象的实际问题。面向对象中两个重要的基本概念就是类和对象,接下来分别介绍一下。

1) 类

世间万物都具有其自身的属性和方法,通过这些属性和方法可以将不同事物区分开来。例如,人具有身高、体重和肤色等属性,还可以进行吃饭、学习、走路等活动,这些活动可以说是人具有的功能。可以把人看作程序中的一个类,那么人的身高可以看作类中的属性,走路可以看作类中的方法。

也就是说,类是属性和方法的集合,是面向对象编程方式的核心和基础,通过类可以将零散的用于实现某项功能的代码进行有效管理。例如,创建一个运动类,其中包括 5 个属性;姓名、身高、体重、年龄和性别,定义 4 个方法:踢足球、打篮球、举重和跳高。

总而言之,类是变量(类的属性)与作用于这些变量的函数(类的方法)的集合,属性与方法是构成类的基础。

2) 对象

类是具备某项功能的抽象模型,实际应用中还需要对类进行实例化,这样就引入了对象的概念。

对象是类进行实例化后的产物,是一个实体。仍然以人为例,“黄种人是人”这句话没有错误,但反过来说“人是黄种人”,这句话一定是错误的。因为除了黄种人,还有黑人、白人等。那么“黄种人”就是“人”这个类的一个实例对象。

可以这样理解对象和类的关系:类是对象的抽象,在类中可以定义对象的属性和方法;对象是类的实例,类只有被实例化后才能使用。

面向对象编程的特性

面向对象编程具有封装、继承、多态三大特性,它们迎合了编程中注重代码重用性、灵活性和可扩展性的需要,奠定了面向对象在编程中的地位。

1) 封装

封装就是将一个类的使用和实现分开,只保留有限的接口(方法)与外部联系。对于用到该类的开发人员,只要知道这个类该如何使用即可,而不用去关心这个类是如何实现的。这样做可以让开发人员更好地把精力集中起来专注于别的事情,同时也避免了程序之间的相互依赖而带来的不便。

例如,在使用计算机时,我们并不需要将计算机拆开了解它每个部件的具体用处,只需要按下电源键就能将计算机启动,这就体现了封装的好处。

2) 继承

继承就是派生类(子类)自动继承一个或多个基类(父类)中的属性与方法,并可以重写或添加新的属性或方法。继承这个特性简化了对象和类的创建,增加了代码的重用性。

例如,已经定义了 A 类,接下来准备定义 B 类,而 B 类中有很多属性和方法与 A 类相同,那么就可以用 B 类继承 A 类,这样就不用再在 B 类中定义 A 类中已有的属性和方法,从而可以在很大程度上提高程序的开发效率。

继承分为单继承和多继承,PHP 目前只支持单继承,也就是说一个子类有且只有一个父类。

3) 多态

对象的状态是多变的。一个对象相对于同一个类的另一个对象来说,它们拥有的属性和方法虽然相同,但却可以有着不同的状态。另外,一个类可以派生出若干个子类,这些子类在保留了父对象的某些属性和方法的同时,也可以定义一些新的方法和属性,甚至于完全改写父类中的某些已有的方法。多态增强了软件的灵活性和重用性。