Z
ZHANK
编程在线教程PHP 教程作用域与静态变量
函数

作用域与静态变量

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++; };