PHP 变量核心特性
1. 变量基础语法
<?php
$username = "PHP开发者"; // 有效变量名
$_version = "8.2"; // 有效(下划线开头)
$userAge = 28; // 驼峰命名法
// $3years = 3; // 无效变量名(数字开头)
// $user-name = "test"; // 无效变量名(包含连字符)
?>
✅ 变量命名规则:
- 以美元符号
$
开头 - 首字符必须使用字母或下划线
- 后续字符可以是字母、数字、下划线
- 区分大小写(Name≠Name≠name)
2. 变量类型系统
PHP是弱类型语言,支持动态类型转换:
类型分类 | 具体类型 | 示例 |
---|---|---|
标量类型 | 整型(int)、浮点(float) | $age = 25; $price=9.99; |
字符串(string)、布尔(bool) | $name="Tom"; $flag=true | |
复合类型 | 数组(array)、对象(object) | $arr=[1,2]; $obj=new User(); |
特殊类型 | 资源(resource)、NULL | $file=fopen(); $var=null |
✅ 类型检测函数:
is_int($var); // 检测整型
is_string($var); // 检测字符串
is_array($var); // 检测数组
is_null($var); // 检测NULL
PHP 变量作用域
1. 作用域类型
✅ 局部变量:仅在定义的函数/代码块内有效
function test() {
$localVar = "局部变量"; // 只能在函数内部访问
echo $localVar; // 正确
}
// echo $localVar; // 报错未定义变量
✅ 全局变量:在全局范围声明
$globalVar = "全局变量";
function showGlobal() {
global $globalVar; // 使用global关键字
echo $globalVar; // 输出:全局变量
}
✅ 静态变量:保持函数调用间的值
function counter() {
static $count = 0;
echo ++$count." ";
}
counter(); // 1
counter(); // 2 (保留上次的值)
2. 超全局变量
PHP 预定义的全局变量分类:
变量名 | 描述 | 示例用法 |
---|---|---|
$_GET | 获取URL 参数 |
$_GET['id'] |
$_POST | 获取表单POST 数据 |
$_POST['username'] |
$_REQUEST | 获取GET +POST +COOKIE |
$_REQUEST['email'] |
$_SESSION | 存取会话数据(需session_start() ) |
$_SESSION['login_time'] |
$_COOKIE | 读取客户端Cookie |
$_COOKIE['user_token'] |
$_SERVER | 服务器和执行环境信息 | $_SERVER['REMOTE_ADDR'] |
$_FILES | 获取文件上传信息 | $_FILES['avatar']['name'] |
$_ENV | 环境变量(需配置启用) | $_ENV['DB_HOST'] |
PHP 高级变量
1. 可变变量(Variable Variables)
$varName = "email";
$$varName = "user@example.com"; // 等效于$email变量
echo $email; // 输出:user@example.com
实际应用场景:
$fields = ['name', 'age', 'email'];
foreach ($fields as $field) {
$$field = $_POST[$field]; // 动态创建变量
}
2. 变量引用
$a = 10;
$b = &$a; // $b是$a的引用
$b = 20;
echo $a; // 输出20(值同步变化)
unset($b); // 只销毁引用关系,不影响$a
3. 变量序列化
$userData = [
'name' => '张三',
'age' => 28,
'is_vip' => true
];
$serialized = serialize($userData); // 序列化
$restored = unserialize($serialized); // 反序列化
序列化和反序列化是将 PHP 变量(如数组、对象等)转换为字符串形式(便于存储或传输),然后再还原回原始数据结构。
上面$userData
数组序列化后转,换为一个可存储/传输的字符串:
a:3:{s:4:"name";s:6:"张三";s:3:"age";i:28;s:6:"is_vip";b:1;}
PHP 变量安全指南
1. 变量安全规范
✅ 安全获取用户输入:
// 过滤GET参数
$username = filter_input(INPUT_GET, 'user', FILTER_SANITIZE_STRING);
// 验证邮箱格式
$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
✅ 防止SQL注入:
// 使用预处理语句
$stmt = $conn->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $user_id);
$stmt->execute();
2. 命名规范建议
- 使用描述性名称(如$customerAddress)
- 遵循驼峰命名法($userAge)
- 布尔变量以
is/has
开头($isLogged) - 避免缩写($usrAddr❌ → $userAddress✅)
PHP 常见错误与调试
1. 典型错误案例
✅ 未定义变量:
// 错误示例
if ($undefinedVar) { ... }
// 正确做法
if (isset($var) && $var) { ... }
✅ 循环引用内存泄漏:
$a = [];
$a[] = &$a; // 创建循环引用
unset($a); // 内存无法回收(PHP5),PHP7+已优化此问题
2. 调试技巧
✅ 使用var_dump调试:
echo '<pre>';
var_dump($_SERVER); // 查看服务器变量
echo '</pre>';
✅ 错误报告设置:
ini_set('display_errors', 1); // 显示错误
error_reporting(E_ALL); // 报告所有错误级别
评论区 0
发表评论
教程介绍
PHP 通用开源服务器端脚本语言,特别适用于 Web 开发,能够嵌入 HTML 中使用。
20
章节
38
阅读
0
评论
反馈提交成功
感谢您的反馈,我们将尽快处理您的反馈