对于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定义。
魔术方法(重点,必掌握):
所有以 __(双下划线)开头的方法都是魔术方法,具有以下特点:
-
无需手动调用,满足特定触发条件后,会自动触发、自动执行。
-
函数名固定,PHP有严格的命名规范,不能随意修改。
-
是PHP的底层机制,所有PHP类都可直接使用。
-
安全风险:极高安全风险,是PHP反序列化漏洞的唯一触发点,也是网络安全人员代码审计的核心目标。
-
常用魔术方法:
-
__construct:构造函数,实例化对象时自动触发。 -
__destruct:析构函数,对象被摧毁(脚本执行结束或主动销毁)时自动触发。 -
__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后端开发的核心逻辑。