主题
  • 默认模式
  • 浅蓝色模式
  • 淡绿色模式
  • 深夜模式

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 评论