PHP 变量
下面对 PHP 中的 变量 做一次全面、系统的详解,涵盖命名规范、数据类型、作用域、引用、可变变量、超全局变量等各个维度。
1. 变量声明与命名规范
- 声明方式:所有变量都以
$
开头,后跟字母或下划线,区分大小写:$name = "Alice"; $_count = 5;
- 命名规范:
- 驼峰式(camelCase):
$userName
- 下划线式(snake_case):
$user_name
- 尽量语义化、避免过短或拼音缩写。
- 驼峰式(camelCase):
- 合法字符:
A–Z
、a–z
、0–9
、_
,但首字符不能是数字。
2. 数据类型与类型转换
PHP 是 弱类型、动态类型 语言,变量的类型由赋值决定,可随时更改。
类型 | 示例 | 说明 |
---|---|---|
整数(int) | $i = 123; | 32/64 位取决于平台 |
浮点数(float) | $f = 3.14; | 双精度 |
字符串(string) | $s = "Hello"; | 支持单/双引号、HereDoc/NowDoc |
布尔(bool) | $b = true; $c = false; | 真/假 |
数组(array) | $a = [1, 2, 3]; | 索引、关联、混合 |
对象(object) | $o = new stdClass(); | 类实例 |
资源(resource) | $r = fopen(...); | 外部资源句柄,如文件、数据库连接等 |
空(NULL) | $n = null; | 等同于未定义变量 |
2.1 隐式类型转换
- 数字与字符串:
"5 apples" + 3
会将字符串开头数字部分转为数字,结果为8
。 - 布尔转换:
0, 0.0, "", "0", [], null
转为false
,其余转为true
。
2.2 显式类型转换(Type Casting)
$intVal = (int) "123abc"; // 123
$floatVal = floatval("3.14");
$strVal = strval(100);
$boolVal = (bool) 0; // false
3. 变量作用域
作用域 | 访问方式 |
---|---|
全局作用域 | 文件顶层定义 |
局部作用域 | 函数或方法内部 |
静态作用域 | static 关键字 |
超全局作用域 | $_GET 、$_POST 等内置数组 |
3.1 全局与局部
$g = 100; // 全局变量
function foo() {
// 默认无法直接访问全局变量 $g
echo $g; // 未定义
}
function bar() {
global $g; // 引入全局作用域的 $g
echo $g; // 100
}
3.2 静态变量
- 在函数多次调用间保留值:
function counter() { static $count = 0; $count++; echo $count; } counter(); // 1 counter(); // 2
- 类中也可声明静态属性:
public static $instances = 0;
4. 引用与可变变量
4.1 变量引用
- 对同一值不同名称的引用:
$a = 1; $b = &$a; $b = 2; echo $a; // 2
4.2 可变变量(Variable Variables)
- 变量名由另一个变量的值动态决定:
$varName = 'score'; $$varName = 98; // 相当于 $score = 98; echo $score; // 98
5. 常量与魔术常量
- 常量:使用
define()
或const
定义,其值不可更改。define('PI', 3.14159); const VERSION = '1.0.0';
- 魔术常量(自动变化):常量名含义
__LINE__
当前行号__FILE__
当前文件全路径__DIR__
当前文件所在目录__FUNCTION__
当前函数名__CLASS__
当前类名__METHOD__
当前类的方法名__NAMESPACE__
当前命名空间
6. 超全局变量(Superglobals)
PHP 内置的、在任意作用域均可直接访问的数组,用于 HTTP 请求、会话、服务器信息等:
变量名 | 用途 |
---|---|
$_GET | HTTP GET 参数 |
$_POST | HTTP POST 参数 |
$_REQUEST | 合并 GET、POST、COOKIE |
$_SESSION | 会话数据 |
$_COOKIE | 客户端 Cookie |
$_SERVER | 服务器与执行环境信息 |
$_FILES | 上传文件信息 |
$_ENV | 环境变量 |
示例:获取 URL 参数 ?id=5
$id = isset($_GET['id']) ? (int)$_GET['id'] : 0;
7. 变量最佳实践
- 初始化:在使用前务必赋值或检查
isset()
,避免未定义警告。 - 类型声明:在函数/方法参数与返回值使用类型声明,提升代码可读性与可靠性。
- 命名一致:团队内统一命名规范,避免歧义。
- 避免滥用引用:除非确有必要,否则推荐使用返回值而非引用传参。
- 严格模式:在文件开头开启严格模式:
declare(strict_types=1);
通过以上各个维度的详解,你应已对 PHP 中的变量有了全面理解。后续可结合实际项目,灵活运用各种变量特性,编写高质量、可维护的代码。若有更深入的问题,欢迎继续交流!