本文介绍了 PHP 面向对象编程(OOP)的基础知识,包括对象、类、创建对象、成员方法、构造函数、析构函数、继承以及方法重写等核心内容,并结合简单示例帮助大家理解各知识点的作用和使用方式。
文章目录
-
- [什么是PHP 面向对象](#什么是PHP 面向对象)
- 总结
什么是PHP 面向对象
在面向对象的程序设计(英语:Object-Oriented Programming ,简称:OOP )中,对象是一个由信息及对信息进行处理的描述所组成的整体,是对现实世界的抽象。在现实世界里,我们所面对的事物都是对象,如计算机、电视机、自行车等。对象主要具有三个特性:对象的行为、对象的形态、对象的表示。
对象的主要三个特性:
- 对象的行为: 可以对对象施加哪些操作,例如开灯、关灯等都属于对象的行为。
- 对象的形态: 当施加某些方法时对象如何响应,例如颜色、尺寸、外形等。
- 对象的表示: 对象的表示相当于对象的身份证,用于区分具有相同行为和状态的不同对象。
例如:Animal(动物)是一个抽象类,我们可以具体实例化为一只狗或一只羊,而狗和羊就是具体的对象,它们具有颜色等属性,也具有奔跑、叫声等行为。
面向对象内容
-
类(Class) ------ 定义了一件事物的抽象特点,类的定义包含了数据的形式以及对数据的操作。
-
对象(Object) ------ 类的实例。
-
成员变量(Member Variable) ------ 定义在类内部的变量。该变量的值对外不可见,但可以通过成员函数访问。当类被实例化为对象后,该变量即可称为对象的属性。
-
成员函数(Member Function) ------ 定义在类内部的函数,用于访问对象的数据。
-
继承(Inheritance) ------ 继承是子类自动共享父类数据结构和方法的机制,是类之间的一种关系。在定义和实现一个类时,可以在已有类的基础上进行扩展,将已有类的内容作为自己的内容,并加入新的功能。
-
父类(Parent Class) ------ 一个类被其他类继承时,该类称为父类,也称基类(Base Class)或超类(Super Class)。
-
子类(Child Class) ------ 继承其他类的类称为子类,也称派生类(Derived Class)。
-
多态(Polymorphism) ------ 多态是指相同的操作、函数或过程可以作用于不同类型的对象,并产生不同的结果。不同对象接收到同一消息时,可以表现出不同的行为,这种现象称为多态。
-
重载(Overloading) ------ 简单来说,就是函数或方法具有相同的名称,但参数列表不同。同名不同参数的函数(或方法)互称为重载函数(方法)。
-
抽象(Abstraction) ------ 抽象是指将具有一致数据结构(属性)和行为(操作)的对象抽象为类。类反映了与应用相关的重要特征,而忽略其他无关细节。
-
封装(Encapsulation) ------ 封装是指将现实世界中对象的属性和行为绑定在一起,并放置到一个逻辑单元中,对外隐藏实现细节。
-
构造函数(Constructor) ------ 用于在创建对象时完成初始化操作,为对象成员变量赋初始值,通常与
new运算符一起使用。 -
析构函数(Destructor) ------ 与构造函数相反,当对象生命周期结束时(例如对象所在函数执行完毕),系统会自动调用析构函数。析构函数通常用于释放资源,例如释放使用
new申请的内存。
PHP创建对象
类创建后,我们可以使用 new ,比如:
bash
$dog = new Animal();
以上代码我们创建了三个对象,三个对象各自都是独立的,接下来我们来看看如何访问成员方法与成员变量。
调用成员方法
PHP 定义类通常语法格式如下,这里我们以Animal类举例:
php
<?php
class Animal{
public $name; # 设置这个类的属性,比如名字,年龄等
public function setName($name)
{
$this->name = $name;
}
public function getName(){`在这里插入代码片`
return $this->name;
}
}
$dog = new Animal(); // 创建对象
$dog->setName('wangcai'); // 调用成员函数,设置名字
echo $dog->getName(); // 调用成员函数,获取名字
PHP构造函数construct
构造函数是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,在创建对象的语句中与 new 运算符一起使用。
相当于:现在我们就不需要再调用setName和getName方法了,直接一次性解决所有问题;
php
<?php
class Animal{
public $name;
public function __construct($name){ //构造函数,初始值
$this->name = $name;}
}
$dog = new Animal("goudan");
echo $dog->name;
结果如下:

PHP析构函数destructor
析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。
php
<?php
class Animal{
public $name;
// 构造函数:创建对象时自动执行
public function __construct($name){
$this->name = $name;
echo "对象创建成功!<br>";
}
// 析构函数:对象销毁时自动执行
public function __destruct(){
echo "对象已销毁,释放资源!";
}
}
$dog = new Animal("goudan");
echo $dog->name;
?>
结果如下:

PHP继承方法extends
PHP 使用关键字 extends 来继承一个类,PHP 不支持多继承,格式如下:
php
class Child extends Parent {
// 代码部分
}
作用: 继承是指子类继承父类的属性和方法,在无需修改原有代码的基础上实现代码复用,并可以扩展新的功能。
php
<?php
// 父类
class Animal{
public $name;
public function __construct($name){
$this->name = $name;
}
public function say(){
echo "我的名字是:" . $this->name . "";
}
}
// 子类继承父类(重点)
class Dog extends Animal{
public function bark(){
echo "汪汪汪!";
}
}
// 创建子类对象
$dog = new Dog("goudan");
// 调用继承自父类的方法
$dog->say();
// 调用子类自己的方法
$dog->bark();
?>
一句话解释
Dog 通过 extends Animal 继承了 Animal 类,因此无需重新定义 name 属性和 say() 方法,就可以直接使用父类的成员,同时还能新增自己的 bark() 方法。
bash
# 继承关系图
Animal(父类)
┌──────────────┐
│ public $name │
│ __construct()│
│ say() │
└──────┬───────┘
│ extends
▼
Dog(子类)
┌──────────────┐
│ bark() │
└──────────────┘
PHP方法重写
如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
作用: 方法重写是指子类继承父类后,重新定义父类中同名的方法,从而实现不同的功能。调用该方法时,会优先执行子类中的实现。
bash
<?php
# 父类
class Animal{
public function say(){
echo "我是一个动物。<br>";
}
}
# 子类
class Dog extends Animal{
// 重写父类的 say() 方法
public function say(){
echo "我是一只大象。<br>";
}
}
$dog = new Dog();
$dog->say();
?>
一句话解释
子类通过定义与父类同名 的方法覆盖父类原有实现,当调用该方法时,会优先执行子类的方法,这就是方法重写(Override)。
总结
本文介绍了 PHP 面向对象编程(OOP)的基础知识,包括对象、类、创建对象、成员方法、构造函数、析构函数、继承以及方法重写等核心内容,并结合简单示例帮助大家理解各知识点的作用和使用方式。
面向对象是 PHP 代码审计中不可或缺的基础。无论是阅读框架源码,还是分析反序列化漏洞、POP 链、魔术方法等安全问题,都离不开对面向对象编程的理解。掌握这些基础知识,将为后续深入学习 PHP 代码审计奠定坚实基础。