Skip to content

8.4 变量作用域(全局 / 局部)

变量作用域指的是变量在代码中的可访问范围,PHP中有三种主要的变量作用域:全局作用域、局部作用域和静态作用域。

全局作用域

全局作用域中的变量可以在脚本的任何地方访问,包括函数内部(需要使用 global 关键字)。

局部作用域

局部作用域中的变量只能在函数内部访问,函数执行完毕后变量会被销毁。

静态作用域

静态作用域中的变量在函数执行完毕后不会被销毁,会保留上次执行的值。

示例代码

php
<?php
// 全局变量
$globalVar = "全局变量";

// 局部变量示例
function testLocal() {
    $localVar = "局部变量";
    echo "函数内部访问局部变量: $localVar<br>";
    echo "函数内部访问全局变量: $globalVar<br>"; // 警告:未定义变量
}

testLocal();
echo "函数外部访问局部变量: $localVar<br>"; // 警告:未定义变量

// 使用 global 关键字访问全局变量
function testGlobal() {
    global $globalVar;
    echo "使用 global 访问全局变量: $globalVar<br>";
    $globalVar = "修改后的全局变量";
}

testGlobal();
echo "函数外部访问修改后的全局变量: $globalVar<br>";

// 使用 $GLOBALS 数组访问全局变量
function testGlobalsArray() {
    echo "使用 GLOBALS 访问全局变量: " . $GLOBALS['globalVar'] . "<br>";
    $GLOBALS['globalVar'] = "通过 GLOBALS 修改的全局变量";
}

testGlobalsArray();
echo "函数外部访问通过 GLOBALS 修改的全局变量: $globalVar<br>";

// 静态变量示例
function testStatic() {
    static $count = 0;
    $count++;
    echo "静态变量 count: $count<br>";
}

echo "第一次调用 testStatic():<br>";
testStatic();
echo "第二次调用 testStatic():<br>";
testStatic();
echo "第三次调用 testStatic():<br>";
testStatic();

// 函数参数也是局部变量
function testParam($param) {
    echo "函数参数: $param<br>";
    $param = "修改后的参数";
    echo "修改后的参数: $param<br>";
}

$arg = "原始参数";
testParam($arg);
echo "函数外部的变量: $arg<br>";
?>

注意事项

  1. 全局变量在函数内部不能直接访问,需要使用 global 关键字或 $GLOBALS 数组
  2. 局部变量只在函数内部有效,函数执行完毕后会被销毁
  3. 静态变量在函数执行完毕后不会被销毁,会保留上次执行的值
  4. 函数参数也是局部变量,修改参数不会影响外部变量

练习

  1. 创建一个函数,使用全局变量统计函数被调用的次数
  2. 创建一个函数,使用静态变量实现计数器功能
  3. 测试全局变量和局部变量的访问权限

© 2026 编程马·菜鸟教程 版权所有