news 2026/7/13 2:34:06

PHP代码审计基础——面向对象(四)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PHP代码审计基础——面向对象(四)

本文介绍了 PHP 面向对象编程(OOP)的基础知识,包括对象、类、创建对象、成员方法、构造函数、析构函数、继承以及方法重写等核心内容,并结合简单示例帮助大家理解各知识点的作用和使用方式。

文章目录

    • 什么是PHP 面向对象
      • 面向对象内容
      • PHP创建对象
        • 调用成员方法
      • PHP构造函数construct
      • PHP析构函数destructor
      • PHP继承方法extends
      • 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 ,比如:

$dog=new Animal();

以上代码我们创建了三个对象,三个对象各自都是独立的,接下来我们来看看如何访问成员方法与成员变量。

调用成员方法

PHP 定义类通常语法格式如下,这里我们以Animal类举例:

<?phpclassAnimal{public$name;# 设置这个类的属性,比如名字,年龄等publicfunctionsetName($name){$this->name=$name;}publicfunctiongetName(){`在这里插入代码片`return$this->name;}}$dog=newAnimal();// 创建对象$dog->setName('wangcai');// 调用成员函数,设置名字echo$dog->getName();// 调用成员函数,获取名字

PHP构造函数construct

构造函数是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,在创建对象的语句中与 new 运算符一起使用。

相当于:现在我们就不需要再调用setNamegetName方法了,直接一次性解决所有问题;

<?phpclassAnimal{public$name;publicfunction__construct($name){//构造函数,初始值$this->name=$name;}}$dog=newAnimal("goudan");echo$dog->name;

结果如下:

PHP析构函数destructor

析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。

<?phpclassAnimal{public$name;// 构造函数:创建对象时自动执行publicfunction__construct($name){$this->name=$name;echo"对象创建成功!<br>";}// 析构函数:对象销毁时自动执行publicfunction__destruct(){echo"对象已销毁,释放资源!";}}$dog=newAnimal("goudan");echo$dog->name;?>

结果如下:

PHP继承方法extends

PHP 使用关键字extends来继承一个类,PHP 不支持多继承,格式如下:

classChildextendsParent{// 代码部分}

作用:继承是指子类继承父类的属性和方法,在无需修改原有代码的基础上实现代码复用,并可以扩展新的功能。

<?php// 父类classAnimal{public$name;publicfunction__construct($name){$this->name=$name;}publicfunctionsay(){echo"我的名字是:".$this->name."";}}// 子类继承父类(重点)classDogextendsAnimal{publicfunctionbark(){echo"汪汪汪!";}}// 创建子类对象$dog=newDog("goudan");// 调用继承自父类的方法$dog->say();// 调用子类自己的方法$dog->bark();?>

一句话解释
Dog通过extends Animal继承了Animal类,因此无需重新定义name 属性和 say() 方法,就可以直接使用父类的成员,同时还能新增自己的 bark() 方法。

# 继承关系图Animal(父类) ┌──────────────┐ │ public$name│ │ __construct()│ │ say()│ └──────┬───────┘ │ extends ▼ Dog(子类) ┌──────────────┐ │ bark()│ └──────────────┘

PHP方法重写

如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写

作用:方法重写是指子类继承父类后,重新定义父类中同名的方法,从而实现不同的功能。调用该方法时,会优先执行子类中的实现。

<?php# 父类class Animal{publicfunctionsay(){echo"我是一个动物。<br>";}}# 子类class Dog extends Animal{// 重写父类的 say()方法 publicfunctionsay(){echo"我是一只大象。<br>";}}$dog=new Dog();$dog->say();?>

一句话解释
子类通过定义与父类同名的方法覆盖父类原有实现,当调用该方法时,会优先执行子类的方法,这就是方法重写(Override)

总结

本文介绍了 PHP 面向对象编程(OOP)的基础知识,包括对象、类、创建对象、成员方法、构造函数、析构函数、继承以及方法重写等核心内容,并结合简单示例帮助大家理解各知识点的作用和使用方式。

面向对象是 PHP 代码审计中不可或缺的基础。无论是阅读框架源码,还是分析反序列化漏洞、POP 链、魔术方法等安全问题,都离不开对面向对象编程的理解。掌握这些基础知识,将为后续深入学习 PHP 代码审计奠定坚实基础。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/13 2:32:43

SlowFast行为识别算法详解:从双通路原理到PyTorch实战

强推&#xff01;计算机博士通俗易懂讲透slowfast行为识别算法&#xff0c;入门到跑通代码&#xff0c;草履虫都能学会&#xff01;最近在视频行为识别项目中&#xff0c;发现很多同学对SlowFast算法既感兴趣又觉得难以入手。网上的资料要么过于理论化&#xff0c;要么代码不完…

作者头像 李华
网站建设 2026/7/13 2:31:15

拼多多爆单运营课:掌握流量分发与SKU定价,科学提升店铺利润

# 拼多多爆单运营课&#xff1a;掌握流量分发与SKU定价&#xff0c;科学提升店铺利润在拼多多的电商生态中&#xff0c;流量红利正在从粗放式增长转向精细化运营。许多商家面临一个核心困境&#xff1a;产品不错&#xff0c;但流量不精准&#xff1b;销量有起色&#xff0c;但利…

作者头像 李华
网站建设 2026/7/13 2:30:53

AI开发成本优化:免费工具与多模型策略实战指南

最近在技术圈里&#xff0c;一个看似简单却直击灵魂的问题被频繁提起&#xff1a;"为AI花多少钱才算够啊&#xff1f;"这背后反映的&#xff0c;是无数开发者和团队在拥抱AI技术时的真实困境——既想享受大模型带来的生产力飞跃&#xff0c;又担心成本失控。如果你也…

作者头像 李华
网站建设 2026/7/13 2:27:59

MQTT v5 协议实战:基于 Mosquitto 2.0 的 7 大新特性代码验证

MQTT v5 协议实战&#xff1a;基于 Mosquitto 2.0 的 7 大新特性代码验证物联网通信协议的发展日新月异&#xff0c;MQTT v5 作为当前最新版本&#xff0c;在 v3.1.1 基础上引入了多项革新特性。本文将聚焦 Mosquitto 2.0 这一轻量级开源 Broker&#xff0c;通过可运行的 C/Pyt…

作者头像 李华
网站建设 2026/7/13 2:27:50

Fable 5智能路由:优化AI编码工作流与成本效益策略

你有没有遇到过这种情况&#xff1a;花大价钱调用 Fable 5 处理一个复杂任务&#xff0c;结果它突然回退到 Opus 4.8&#xff0c;或者因为安全分类器而拒绝执行&#xff1f;这不是模型的问题&#xff0c;而是使用方式的问题。真正的问题不是“Fable 能不能写代码”&#xff0c;…

作者头像 李华