php变量作用域由执行上下文和作用域关键字共同控制:函数内默认局部、函数外默认全局,互不相通;需用global或$globals访问全局变量;static变量仅函数内可见且只初始化一次;闭包用use按值或引用捕获外部变量。

PHP里变量在哪儿能用、在哪儿不能用
PHP变量作用域不是靠“声明位置”自动决定的,而是由「执行上下文」和「作用域关键字」共同控制。没显式声明作用域的变量,默认属于当前作用域——函数内就是局部,函数外就是全局,但它们互不相通。
函数内部读不到外面的变量,除非加 global 或 $GLOBALS
这是最常踩的坑:在函数里直接写 $name,以为能拿到外面定义的同名变量,结果是空或报错。
常见错误现象:Undefined variable: name(函数内未声明就使用)或值始终为空
- 用
global $name把外部变量引入函数作用域(注意:是“引入”,不是“复制”) - 用
$GLOBALS['name']直接访问全局空间,更明确,也避免命名冲突 - 别在函数里用
unset($name)后还指望外部变量消失——global引入的是引用,unset会真正删掉全局变量
static 变量只初始化一次,但只在函数内可见
它不是全局变量,也不是普通局部变量。典型场景是计数器、缓存单次计算结果。
立即学习“PHP免费学习笔记(深入)”;
十天学会易语言图解教程用图解的方式对易语言的使用方法和操作技巧作了生动、系统的讲解。需要的朋友们可以下载看看吧!全书分十章,分十天讲完。 第一章是介绍易语言的安装,以及运行后的界面。同时介绍一个非常简单的小程序,以帮助用户入门学习。最后介绍编程的输入方法,以及一些初学者会遇到的常见问题。第二章将接触一些具体的问题,如怎样编写一个1+2等于几的程序,并了解变量的概念,变量的有效范围,数据类型等知识。其后,您将跟着本书,编写一个自己的MP3播放器,认识窗口、按钮、编辑框三个常用组件。以认识命令及事件子程序。第
使用场景:需要保留上一次函数调用状态,又不想暴露给其他函数
-
static $count = 0—— 第二次调用时,这个$count还是上次结束时的值,不会重置为 0 - 不能用
global访问static变量,它不属于全局空间 - 如果初始化表达式含函数调用(如
static $data = json_decode(file_get_contents('config.json'))),PHP 7.4+ 才支持;老版本会报错constant expression contains invalid operations
闭包里的 use 是按值还是按引用,得看有没有 &
匿名函数默认无法访问外部变量,必须用 use 显式捕获。但捕获方式直接影响后续行为。
参数差异:use ($x) 是拷贝一份值,use (&$x) 是绑定引用
- 修改
use ($x)捕获的变量,不影响外部$x - 修改
use (&$x)捕获的变量,外部$x同步变化 - 如果
$x是对象,即使不用&,修改对象属性也会反映到外部(因为 PHP 对象默认传引用) - 注意:不能
use超全局数组如$_POST,会报Cannot use superglobal as parameter
作用域真正复杂的地方不在语法,而在「谁在什么时候创建了变量」「谁持有它的生命周期」。比如 static 和 use 都会延长变量存活时间,但延长的方式和边界完全不同。稍不注意,就会出现预期外的共享或丢失。










