作用域与静态变量
global 关键字、$GLOBALS 数组、static 静态变量、use 闭包传参
作用域与静态变量
PHP 的变量作用域和 C/Java 不同——函数内不能直接访问全局变量,必须用 global 关键字。
学完本章你将: 掌握 global、$GLOBALS、static 变量、闭包 use。
作用域隔离
php
<?php
$name = "小明"; // 全局作用域
function sayHello() {
echo $name; // ❌ Warning: Undefined variable $name
}
function sayHello2() {
global $name; // 引入全局变量
echo $GLOBALS['name']; // 或通过 $GLOBALS 数组
echo $name; // 现在可以了
}
sayHello2(); // "小明"
⚠️ 大量使用
global是代码坏味道——考虑用参数传递或依赖注入。
static 静态变量
php
<?php
function counter(): int {
static $count = 0; // 只在第一次调用时初始化
return ++$count;
}
echo counter(); // 1
echo counter(); // 2
echo counter(); // 3
// 变量值在函数调用间保留
闭包中的 use
php
<?php
$prefix = "你好";
// 闭包需要显式用 use 引入外部变量
$greet = function(string $name) use ($prefix): string {
return "$prefix,$name!";
};
echo $greet("小明"); // 你好,小明!
// 要修改变量用引用
$count = 0;
$increment = function() use (&$count) { $count++; };