PHP函数作用域规定变量的可访问范围:局部变量仅在函数内有效,全局变量需用global或$GLOBLS引用,静态变量用static保持状态,参数默认值传递,引用传递需加&符号。

PHP函数作用域指的是变量在函数内部和外部的可访问性规则。理解这一点,关键在于搞清楚变量在不同位置声明时的作用范围以及函数如何与外部环境交互。
局部作用域:函数内的变量
在函数内部声明的变量具有局部作用域,只能在该函数内被访问。
例如:
function testLocal() {$localVar = "我是局部变量";
echo $localVar;
}
testLocal(); // 输出:我是局部变量
// echo $localVar; // 错误:无法访问,变量未定义
上面代码中,$localVar 只能在 testLocal 函数内使用,函数执行完毕后,该变量自动销毁。
立即学习“PHP免费学习笔记(深入)”;
全局作用域:函数外的变量
在函数外部声明的变量属于全局作用域,正常情况下函数内部无法直接访问。
例如:
$globalVar = "我是全局变量";function testGlobal() {
// echo $globalVar; // 错误:无法直接访问全局变量
}
如果想在函数中使用全局变量,必须使用 global 关键字声明。
function testGlobalWithGlobal() {global $globalVar;
echo $globalVar; // 输出:我是全局变量
}
或者通过超全局数组 $GLOBALS 来访问:
function testGlobalViaSuperglobal() {echo $GLOBALS['globalVar']; // 同样输出:我是全局变量
}
静态变量:跨调用保持状态
使用 static 关键字声明的变量,在函数执行结束后不会被销毁,下次调用时保留上次的值。
适用于需要记录函数被调用次数等场景。
function counter() {static $count = 0;
$count++;
echo "调用次数:$count\n";
}
counter(); // 调用次数:1
counter(); // 调用次数:2
counter(); // 调用次数:3
如果不加 static,$count 每次都会重置为 0。
参数与作用域传递
函数参数本质上是局部变量,其值由调用时传入。
默认按值传递,修改参数不会影响外部变量:
function modify($value) {$value = $value * 2;
}
$num = 5;
modify($num);
// $num 仍然是 5
若需修改外部变量,可使用引用传递(&符号):
function modifyByReference(&$value) {$value = $value * 2;
}
$num = 5;
modifyByReference($num);
// $num 变为 10
基本上就这些。掌握函数作用域,核心是明白变量在哪里声明、在哪里可用。局部变量私有安全,全局变量需显式引入,静态变量维持状态,参数传递注意值与引用区别。理解清楚这些机制,写函数时就不会出现变量找不到或意外修改的问题了。











