PHP OOP(面向对象编程)

2025年4月16日 | 阅读 7 分钟

面向对象编程(OOP)是一种以对象为中心而不是以动作,以数据为中心而不是以逻辑组织的编程模型。在 OOP 中,我们创建对象并同时保存数据和函数,而在过程式编程中,我们编写执行数据操作的过程或函数。

OOP 的执行需要更少的精力和速度,这会产生清晰的程序架构。OOP 通过维护“DRY”编码原则,创建易于维护的 PHP 文档,开发人员可以更轻松地修改或调试。开发人员可以使用 OOP 来构建可重复使用的应用程序,从而缩短开发时间。

面向对象编程概念

在详细讨论 OOP 编程概念之前,让我们先列出 PHP 中与面向对象编程相关的术语。

Class

类是决定对象如何行为以及对象将包含什么的实体。换句话说,它是构建特定类型对象的蓝图或指令集。

在 PHP 中,使用 class 关键字声明类,后跟类名和一对花括号({})。

PHP WITH OOPS CONCEPT

上图直观地表示了类和对象的概念。其中,

左边的 Car 是一个类,它就像一个蓝图或模板。它定义了所有汽车对象将拥有的结构和行为。

而 Mercedes、BMW 和 Audi 是从 Car 类创建的对象。每个对象都是类的真实、可用的版本,并拥有自己的数据。

= 想法/设计

对象 = 现实世界的想法。

PHP 中创建类的语法

注意:在 PHP 中,要查看类的内容,请使用 var_dump()。var_dump() 函数用于显示一个或多个变量的结构化信息(类型和值)。

语法

Object

我们知道类定义了数据结构的个体实例,其中我们定义一次类,然后创建许多属于它的对象。对象也称为实例。

对象是可以执行一组相关活动的实体。

语法

类和对象的示例

示例 1

立即执行

输出

Hello TPointTech

说明

demo 类定义了私有属性 $a,其初始值为“Hello TPointTech”。通过 display 方法,可以使用 $this->a 私有属性来打印其内容。当程序创建名为 $obj 的 demo 类实例时,它会运行 display 方法,该方法产生“Hello TPointTech”。

示例 2:使用 var_dump($obj);

示例

立即执行

输出

TPointTech welcomes you!
Object(demo)[1]
    Private 'a' -> string 'TPointTech welcomes you' (length=23)

说明

该示例继续展示了 var_dump() 函数的使用,以及之前的示例。通过 var_dump($obj) 函数,对象的内部结构变得可见,这证明了它属于 demo 类,并显示私有属性 $a 包含指定的字符串值。

继承

子类通过继承从父类获得其操作能力。在继承过程中,子类从其父类收集属性和方法,然后再启用其他函数或方法。

语法

示例

立即执行

输出

Bark

说明

Dog 类继承自 Animal 类。在 Dog 类的实现中,sound() 方法产生输出“Bark”,而默认的 Animal 类操作生成“Some sound”。

多态

这种功能使程序员能够在各种应用程序中维护一个函数。函数名称保持一致,而参数会改变,并且函数内的所有操作都会转换。

语法

示例

立即执行

输出

Bird is flying
Airplane is flying

说明

fly() 方法存在于两个对象中,但 Aeroplane 和 Bird 以不同的方式处理其执行。flying_object 函数使用各种对象类型,这些对象类型共享通用的 fly() 方法来显示多态行为。

成员函数

成员函数定义在类内部,用于获取对象数据。

语法

示例

立即执行

输出

78.5

说明

Area() 作为成员方法,属于 Circle 类。该方法通过 $radius 属性确定面积,该属性从构造函数获取其值。

数据抽象

当应用于编程系统时,有一种技术方法允许访问基本组件,同时保护基本功能免受修改。

语法

示例

立即执行

输出

Car engine started

说明

Vehicle 是一个抽象类。Car 通过仅提供必要的用户信息来实现抽象方法。

构造函数

对象在创建过程中会自动触发此特定函数。它用于初始化。

语法

示例

立即执行

输出

Alice

说明

在对象创建后,__construct() 方法开始初始化对象所包含的属性。Person 类实现构造函数功能以设置 name 属性。

析构函数

当对象满足其移除条件并离开内存分配时,系统会执行此函数。

示例

立即执行

输出

Destructor called

说明

PHP 在对象销毁时触发 __destruct() 方法,当程序执行 unset($d) 时发生。通过此机制可以管理适当的清理机制,同时对象存在于内存中。

注意:脚本终止和对象 unset 操作会自动触发 __destruct() 执行。析构函数始终以前导的两个下划线(__)开头。

提示:构造函数和析构函数非常有用,因为它们有助于减少代码量。

封装

名为封装的代码块将数据成员和成员函数组织在一个单独的类单元中,同时使某些对象元素无法直接访问。

语法

示例

立即执行

输出

100

说明

所有类数据(属性)和方法都绑定为一个单元。Account 类定义了私有的 balance 属性,该属性需要通过公共 deposit() 方法进行修改,但使用 getBalance() 作为属性访问的手段。

重载

多态的一个子类型允许运算符和方法根据它们从参数接收的内容而有不同的功能。

语法

示例

立即执行

输出

3
6

说明

__call() 魔术方法允许响应所有指向不可用或无法访问方法的调用。add() 方法从方法调用中接收不同的参数数量,因此 __call() 魔术方法通过根据输入参数数量执行唯一的操作集来模拟重载。

PHP 的重要性 - $this 关键字

$this 关键字允许访问当前执行代码的对象。

示例

立即执行

输出

Toyota

说明

当前对象可以使用 $this 关键字检索其属性。brand 变量通过此 brand 引用进行赋值和访问。对象 $myCar 的实例化在其接收“Toyota”作为 brand 参数然后显示结果时进行。

结论

PHP 的面向对象编程范例提供了一种有组织的方法来创建可重用的代码。通过使用类以及将它们与对象和封装与继承结合起来,开发人员实现了应用程序的可伸缩性。

PHP 的编程灵活性源于构造函数、析构函数和多态功能,而对象属性管理由 $this 函数支持。由于 OOP,PHP 编程在速度和可维护性方面都有所提高。


下一个主题PHP 类和对象