PHP 变量

下面对 PHP 中的 变量 做一次全面、系统的详解,涵盖命名规范、数据类型、作用域、引用、可变变量、超全局变量等各个维度。


1. 变量声明与命名规范

  • 声明方式:所有变量都以 $ 开头,后跟字母或下划线,区分大小写:$name = "Alice"; $_count = 5;
  • 命名规范
    • 驼峰式(camelCase):$userName
    • 下划线式(snake_case):$user_name
    • 尽量语义化、避免过短或拼音缩写。
  • 合法字符A–Za–z0–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 请求、会话、服务器信息等:

变量名用途
$_GETHTTP GET 参数
$_POSTHTTP POST 参数
$_REQUEST合并 GET、POST、COOKIE
$_SESSION会话数据
$_COOKIE客户端 Cookie
$_SERVER服务器与执行环境信息
$_FILES上传文件信息
$_ENV环境变量

示例:获取 URL 参数 ?id=5

$id = isset($_GET['id']) ? (int)$_GET['id'] : 0;

7. 变量最佳实践

  1. 初始化:在使用前务必赋值或检查 isset(),避免未定义警告。
  2. 类型声明:在函数/方法参数与返回值使用类型声明,提升代码可读性与可靠性。
  3. 命名一致:团队内统一命名规范,避免歧义。
  4. 避免滥用引用:除非确有必要,否则推荐使用返回值而非引用传参。
  5. 严格模式:在文件开头开启严格模式:declare(strict_types=1);

通过以上各个维度的详解,你应已对 PHP 中的变量有了全面理解。后续可结合实际项目,灵活运用各种变量特性,编写高质量、可维护的代码。若有更深入的问题,欢迎继续交流!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注