Appearance
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>";
?>注意事项
- 全局变量在函数内部不能直接访问,需要使用
global关键字或$GLOBALS数组 - 局部变量只在函数内部有效,函数执行完毕后会被销毁
- 静态变量在函数执行完毕后不会被销毁,会保留上次执行的值
- 函数参数也是局部变量,修改参数不会影响外部变量
练习
- 创建一个函数,使用全局变量统计函数被调用的次数
- 创建一个函数,使用静态变量实现计数器功能
- 测试全局变量和局部变量的访问权限
