Web后端入门:PHP核心基础全解析(含安全要点)

对于Web开发新手而言,后端是网站的"核心大脑",负责处理请求、逻辑运算、数据交互等底层工作。而PHP作为一门开源、入门简单、应用广泛的服务器端脚本语言,是后端入门的绝佳选择。本文将系统拆解PHP核心知识点,从基础语法到类与对象,再到序列化与安全风险,全程贴合实操,帮新手快速掌握PHP后端基础。

一、认识PHP

PHP(全称:PHP: Hypertext Preprocessor,超文本预处理器)是一门开源的服务器端脚本编程语言,专门用于开发Web网站的后端逻辑,无需复杂的环境配置,嵌入HTML中即可运行,是中小型网站后端开发的主流选择。

核心语法框架(PHP代码必须包裹在以下标签内,才能被服务器解析执行):

php 复制代码
<?php
// 此处编写PHP代码
?>
 

二、PHP常用函数与语句

PHP内置了大量实用函数,覆盖输出、命令执行、文件引入等常用场景,新手重点掌握以下几个即可满足基础开发需求:

  • echo:输出单一类型数据(数字、字符串、布尔值),语法简洁,适合简单输出场景。

  • print_r():主要用于输出复合类型数据(数组、对象),能清晰展示数据结构。

  • var_dump():可输出所有数据类型(数字、字符串、布尔、null、数组、对象),会显示数据类型和详细信息,适合调试。

  • system():执行系统命令,需谨慎使用,存在安全风险。

  • eval():执行字符串形式的PHP代码,灵活但风险极高,避免在生产环境使用。

  • exec():执行系统命令,与system()功能类似,返回结果形式不同。

  • include:引入并执行外部代码文件,可实现代码复用(如公共头部、底部)。

三、PHP变量与超全局变量

变量是PHP中存储数据的"容器",语法规则简单,同时系统自带超全局变量,可直接用于接收请求数据,是后端处理用户请求的核心。

1. 变量基础

  • 变量数据类型:常用类型包括数值、字符串、数组、布尔、对象,无需手动声明类型,赋值后自动识别。

  • 变量赋值:所有PHP变量均以 $ 开头,例如 $name = "admin"

  • $this:代表当前对象(仅在类和对象中使用)。

  • 超全局变量:以 $_ 开头,系统自带,无需定义即可直接使用,核心用于接收请求数据。

2. 核心超全局变量(重点掌握)

  • $_GET:以GET方式传输的数据,数据会附加在URL后面,对用户完全可见,受URL长度限制(通常2KB-8KB),不适合传输大量数据和敏感信息,适合数据查询、页面跳转等非敏感操作(如百度搜索)。

  • $_POST:以POST方式传输的数据,数据存储在请求体中,URL中不可见,可传输大量数据,支持文件上传,理论上无大小限制,适合登录、注册、文件上传等敏感或大数据量操作。

  • $_FILES:专门用于获取用户上传文件的相关信息,包括文件名、文件大小、临时存储路径等,是文件上传功能的核心变量。

四、if()条件判断

条件判断是后端逻辑处理的基础,PHP中if()判断的核心是"真假判断",掌握为假的条件和逻辑运算符,就能实现复杂的逻辑控制。

1. 为假的条件(重点记忆)

以下情况在if()判断中均视为"假",其余情况均为"真":

0(包括0.0、字符串"0")、空字符串(注意:空格不属于空字符串)、空数组、空对象、NULL、空资源、布尔值false。

2. 常用逻辑判断符

  • 比较运算符:==(等于,不比较数据类型)、===(全等,比较数据类型和值)、!=(不等于)、!==(不全等)、<(小于)、>(大于)、<=(小于等于)、>=(大于等于)。

  • 逻辑运算符:&&(逻辑与,两边都为真则整体为真)、and(同&&,优先级更低)、||(逻辑或,一边为真则整体为真)、or(同||,优先级更低)、!(逻辑非,真变假、假变真)、xor(异或,一真一假则为真)。

五、类(class)与对象

PHP支持面向对象编程(OOP),类和对象是面向对象编程的核心,用于封装属性和方法,实现代码的复用和模块化。

1. 类的定义

类是具有相同属性和行为的对象的抽象集合,是一种自定义的复合数据类型,定义了某一类事物共有的特征(属性)和能执行的操作(方法)。

类的权限修饰符(控制属性和方法的访问范围):
  • public(公共):全局可用,任何地方都能访问。

  • private(私有):仅当前类内部可用,外部无法访问。

  • protected(受保护):当前类和其子类可用,外部无法访问。

类的结构:
  • 属性:本质是类内部的变量,语法与普通变量一致,需加 $

  • 方法:本质是类内部的函数,用 function 定义。

魔术方法(重点,必掌握):

所有以 __(双下划线)开头的方法都是魔术方法,具有以下特点:

  1. 无需手动调用,满足特定触发条件后,会自动触发、自动执行。

  2. 函数名固定,PHP有严格的命名规范,不能随意修改。

  3. 是PHP的底层机制,所有PHP类都可直接使用。

  4. 安全风险:极高安全风险,是PHP反序列化漏洞的唯一触发点,也是网络安全人员代码审计的核心目标。

  5. 常用魔术方法:

    1. __construct:构造函数,实例化对象时自动触发。

    2. __destruct:析构函数,对象被摧毁(脚本执行结束或主动销毁)时自动触发。

    3. __wakeup:唤醒函数,对象被反序列化时自动触发。

类的语法示例:

2. 对象

对象是类的实例化产物,是类的具体表现形式。一个类可以实例化出无数个对象,每个对象都拥有类中定义的全部属性和方法。

对象的使用语法:

  • 访问属性:对象->属性

  • 调用方法:对象->方法()

  • 给属性赋值:对象->属性 = "赋值内容"

六、实例化

实例化是从抽象的类创建出具体对象的过程,通过 new 关键字 + 类名称实现,通常会将实例化后的对象存储在变量中,方便后续调用。

实例化语法:

php 复制代码
<?php
class a {
    // 定义属性(可加权限修饰符)
    public $name="haha";
    public $sex;
    private $age=18;

    // 定义方法
    public function haha() {
        echo $this->name;
    }

    // 魔术方法-构造函数
    public function __construct() {
        echo "对象实例化时触发";
    }
}

$user = new a;
$user->sex = "男";
$user->haha();
?>
 

七、序列化与反序列化

序列化与反序列化是PHP中实现对象传输和存储的核心机制,常用于数据存储、跨页面传递对象等场景,但同时也存在较高的安全风险。

1. 序列化

通过PHP内置函数 serialize(),将一个完整的PHP对象(或其他数据类型),转换为一串结构化、可传输、可存储的纯字符串的过程。

核心特点:只保存对象的属性,不保存对象的方法。

常见类型标识(序列化字符串中关键字符含义):

O=对象、a=数组、s=字符串、i=数字、d=小数、b=布尔、N=null

序列化语法:

serialize(对象); // 返回序列化后的字符串

示例(序列化后字符串结构):

O:1:"a":2:{s:4:"name";s:4:"haha";s:3:"age";i:18;}

解析:O(对象类型):1(类名长度):"a"(类名):2(属性数量){s:4:"name";s:4:"haha";(字符串类型属性name,值为haha)s:3:"age";i:18;(数字类型属性age,值为18)}

2. 反序列化

通过PHP内置函数 unserialize(),将序列化生成的字符串,还原为序列化之前的完整PHP对象(或其他数据类型)的过程,是序列化的反向操作。

反序列化语法:

unserialize(序列化字符串); // 返回还原后的对象或数据

示例:

php 复制代码
<?php
class a {}

$a = new a;
$serialized = serialize($a);
$unserialized = unserialize($serialized($a));
?>
 

3. 反序列化漏洞防范(重点)

由于魔术方法的特性,反序列化操作存在极高的安全风险,容易被攻击者利用发起恶意攻击,常用防范措施:

  • 输入验证与过滤:对反序列化的输入数据进行严格校验,过滤恶意字符和非法数据。

  • 实施对象白名单:仅允许指定的、安全的类进行反序列化操作,禁止未知类的反序列化。

八、总结

本文涵盖了PHP后端入门的核心知识点,从基础语法、常用函数、变量与超全局变量,到类与对象、实例化、序列化与反序列化,再到安全防范要点,基本覆盖了新手入门所需的全部内容。

PHP入门门槛低,但细节和安全风险较多,尤其是魔术方法和反序列化漏洞,既是重点也是难点。建议新手先熟练掌握基础语法和常用函数,再逐步深入面向对象编程和安全防护,多写实操代码,才能真正掌握PHP后端开发的核心逻辑。

相关推荐
小天互连即时通讯21 小时前
政府及企业场景下如何选即时通讯工具:从安全可控到协同效率的实用判断
安全
Once_day1 天前
网络以太网之(3)LLDP协议
网络·以太网·lldp
m0_738120721 天前
渗透测试基础ctfshow——Web应用安全与防护(五)
前端·网络·数据库·windows·python·sql·安全
zopple1 天前
四大编程语言对比:PHP、Python、Java与易语言
java·python·php
其实防守也摸鱼1 天前
XSS漏洞全景解析:从原理、实战利用到纵深防御
前端·网络·安全·xss·xss漏洞
路由侠内网穿透.1 天前
本地部署开源客服系统 FreeScout 并实现外部访问( Windows 版本)
运维·服务器·网络·windows·网络协议
你觉得脆皮鸡好吃吗1 天前
Check Anti-CSRF Token (AI)
前端·网络·网络协议·安全·csrf·网络安全学习
威迪斯特1 天前
项目解决方案:某连锁餐饮集团AI后厨与运营安全建设解决方案
人工智能·安全·项目解决方案·ai实时分析·智能餐饮管理·ai视频识别·智能视频分析硬件
向宇it1 天前
关闭SSH密码登录,SSH 如何使用公钥密钥登录服务器(解决服务器经常被攻击问题)
服务器·网络·ssh
哼?~1 天前
Socket--TCP
网络