# 变量作用域
[TOC]
>[success] 变量作用的范围(可以被使用的范围)称为变量作用域,按作用域,可以将PHP变量分为超全局变量、全局变量和局部变量
局部变量:在函数内部声明的变量,就是局部变量,当函数执行完毕,**局部变量就消失了**。局部变量,**只能在函数内部使用**。
全局变量:在函数外部声明的变量,就是全局变量。在PHP中全局变量,**在函数中不能使用**,网页执行完毕,全局变量消失。
超全局数组变量:系统定义的变量,就是超全局变量。**该变量可以在任何地方直接使用**。
>[info] static静态变量:使用static修饰符修饰的变量就称之为静态变量,在我们变量作用域当中,函数执行完成函数体内的变量自动销毁,使用了static修饰符,可以把函数执行完成后的变量保留起来,在外部还可以继续的使用
>[danger] 注意:PHP变量作用域,与JS变量作用不一样。JS的全局变量可以直接在函数内部使用;而PHP的全局变量在函数内部不能直接使用
## global关键字
在变量作用域的情况下,我们在函数体的内部想使用函数体外部的全局变量怎么办呢?
PHP为我们提供了global关键字解决函数内部作用域的问题,从而让我们可以使用函数体外部的全局变量。
global关键字需要注意的事项:
* [ ] global关键字,**只能在函数内部申明变量**
* [ ] global关键字,**申明时不能赋值,必须申明之后才可以进行赋值操作**
* [ ] global的作用,是引用传递地址,将全局变量的地址,传递到函数内部
* [ ] global关键字,**在函数内部,使用unset()删除 global引用的变量时,将不会影响到全局变量**
```
<?php
$a = 100;
function get()
{
global $a; # 正确操作
global $a = 200; # 报错,必须先声明在赋值
unset($a);# 删除是引用的值,不会影响函数外部变量
echo $a;# 如果直接使用那么就会报错,删除变量后函数体内部打印会报错
}
get();
```
## 超全局数组变量$GLOBALS
$GLOBALS可以引用全局作用域中可用的全部变量
* [ ] 如果在函数内部,使用unset可以删除一个全局变量,会影响到全局变量
* [ ] 通过$GLOBALS可以添加一个全局变量
```
<?php
$a = 100;
function get()
{
$GLOBALS['age'] = 22;# 通过GLOBALS可以添加一个全局变量,且在函数体外部可以使用
unset($GLOBALS['a']); # 通过GLOBALS删除全局变量,会影响到全局变量
$GLOBALS['a'] = 500; # 通过GLOBALS直接申明并赋值不会报错,是正确的使用
}
get();
echo $age; # 结果为22,GLOBAL可以添加一个全局变量
echo $a; # 结果为500,因为我虽然删除了开始的a但是又声明定义了一个全新的a全局变量
```
## global与$GLOBALS的区别
* [ ] global unset变量不会影响全局的变量,而$GLOBALS会影响
* [ ] global 必须先申明再赋值,而$GLOBALS可以直接申明并赋值
>[danger] 以上就是换个写法都可以做到相同,下面是我百度结果,但是我还是没太看明白
> 很多人都认为global和$GLOBALS\[\]只是写法上面的差别,其实不然(我就是这其中的一员),具体的区分我也不太懂,在我的理解里面他们除了写法上的差别就没啥区别了。但是这肯定错误的,不然网上不会那么人说区别很大。有好的理解欢迎您的留言。
- 基础
- 安装PHP
- 语言基础
- 变量
- 变量操作
- 超全局数组变量
- 变量作用域
- 变量传值方式
- 常量
- 数据类型
- 运算符
- 流程控制
- 文件包含
- 错误处理
- 字符串操作
- 数组
- 函数
- 进阶
- 面向对象
- 提高
- TP
- 安装项目
- 框架基础知识
- 命令创建模块
- URL生命周期
- 路由操作
- Request请求类
- 参数绑定
- 依赖注入
- 模板操作
- 查询操作
- 添加操作
- laravel
- ☆目录结构
- CSRF攻击
- ☆路由
- ☆控制器
- ☆请求类
- ☆视图
- ☆模板继承
- ☆表单验证
- ☆DB类
- ☆模型
- ☆数据库迁移
- 类型、修饰、索引
- ☆数据填充
- ☆数据分页
- ☆session处理
- ☆中间件
- ☆缓存操作
- ☆文件上传
- ☆接口操作
- ☆扩展插件
- restful
- 工作
- 工作记录
- QQ登录
- 新浪登录
- 微信登录
- sphinx搜索
- 数据库
- MySQL
- ☆数据库操作
- ☆数据表操作
- ☆数据的操作
- 待修改
- 优化
- 存储引擎选择
- 列表类型选择
- 范式
- 慢日志查询
- 精准时间记录查询
- 计划任务 explain
- 索引
- 索与事务
- 查询缓存
- 存储过程
- 触发器
- 分区
- 分表
- sphinx
- 读写分离
- 搜索优化
- 网站静态化
- Memcache
- Mongodb
- Readis
- php使用redis
- 服务器
- Linux
- 目录结构
- 常用命令
- VIM编辑器
- 用户与用户组
- 权限管理
- 运行级别
- 网络模式
- ssh
- 软件安装
- 计划任务
- Ubuntu
- 编译PHP7.3
- 编译MySQL
- 编译Nginx
- apache虚拟机配置
- 安装composer
- Nginx
- Git