php里的超全局变量,PHP 超全局变量

PHP 超全局变量(Superglobal)是自动化的全局变量,在任何作用域都可以使用,不需要使用 global 关键字声明 $variable。

变量名

说明

引用了全部全局变量的数组,如 $GLOBALS[‘_GET’]、$GLOBALS[‘_POST’] 等等,以及一个对自身 GLOBALS 的引用。

PHP 解析浏览器请求携带的 cookie 生成的数组

$_ENV 包含当前的环境变量,与 phpinfo() 输出的 Environment 表格一致,但默认为空,通过 getenv() 可以获取到指定的环境变量

$_FILES 包含当前 HTTP POST 上传的文件列表。

$_GET 包含 URL 参数列表

$_POST 包含 POST 参数列表

可能包含 $_GET、$_POST、$_COOKIE,不包含 $_FILES。 request_order 控制包含的参数列表。

包含服务器和脚本执行环境信息,比如 HTTP 请求头信息、脚本信息,不同服务器信息会有不同。

包含当前 SESSION 变量列表。需要先调用 session_start() 开启会话。

以命令行(CLI)形式运行 PHP 脚本,传递给脚本的参数总数。需要开启 register_argc_argv

以命令行(CLI)形式运行 PHP 脚本,传递给脚本的参数数组。需要开启 register_argc_argv

保存当前作用域下最新 HTTP 请求的的响应头信息

$GLOBALS

$name = 'Seven';

function hello() {

$name = 'Eight';

echo "local name is $name"; // Eight

echo "\n",

echo "global name is "

. $GLOBALS['name']; // Seven

}

php.ini 中的 register_globals(在 PHP 5.4.0 中被移除)表示将 globals 变量中的成员自动注册为全局变量。

// 设置 register_globals = on;

$_GET['name'] = 'Seven';

$name === $_GET['name']; // true

// 设置 register_globals = off;

// 不会将 global 变量中的成员自动注册为全局变量

$_COOKIE

$_COOKIE 包含当前请求的 cookie 列表,在请求中使用 setcookie 再调用 $_COOKIE 不会立刻获得相同的值。

// 设置 cookie

setcookie('name', 'Seven');

// 获取 cookie

$_COOKIE['name'] // 不能立刻获得设置的 cookie

// 因为 $_COOKIE 存放的是当前浏览器发送到服务器的 cookie

// 其次, setcookie 不一定设置 cookie 成功

$_ENV

默认的 $_ENV 数组为空,是因为 variables_order可能没有包含 E —— _ENV。

CEGPS 分别对应 $_COOKIE、$_ENV、$_GET、$_POST、$_SERVER,variables_order 的默认值没有包含 E,因此不会设置超全局变量 $_ENV。variables_order 为空则不会设置任何超全局变量。

$_FILES

$_FILES 包含的是文件列表,是一个二维数组,一般结合 move_uploaded_file() 将上传的文件存放到需要的位置,类似结构如下:

array(

// myfile 是 input 表单的 name 属性

'myfile' => array(

'name' => '', // 文件的原名称

'type' => '', // 文件的 MIME 类型

'size' => '', // 文件的字节大小

'tmp_name' => '', // 存放的包含路径的临时文件名

'error' => '', // 上传的错误代码

);

);

// 如果 php 对 upload_tmp_dir 没有写入权限,

// 则上传的文件无法存放在文件系统上

$_GET

$_POST

$_POST 只解析类似 URL 参数列表结构的 POST BODY 中的数据,比如将 name=Seven 解析为 $_POST[‘name’] = Seven,调用 AJAX XMLHttpRequest 的 send() 方法传递的字符串一般类似 name=Seven&age=20。

$_POST 不能解析文件流,也不能解析 send() 的 JSON 字符串,需要使用 @file_get_contents(‘php://input’) 获取 POST 的内容,再进行解析——比如 json_decode 获得 JSON,base64_decode 获得二进制流。

$_REQUEST

// request_order = 'GP'

// 表示 $_REQUEST 包含 $_GET、$_POST 内容

// 同名 key 后者覆盖前者

// request_order = 'GPC'

// 表示 $_REQUEST 包含 $_GET、$_POST、$_COOKIE 内容

$_SERVER

$_SERVER['HTTP_HOST'] // HTTP 请求的主机

$_SERVER['HTTP_USER_AGENT'] // HTTP 请求 User-Agent

$_SERVER['HTTP_COOKIE'] // HTTP 请求 COOKIE

$_SERVER['HTTP_ACCEPT_LANGUAGE'] // 可以接受的语言列表

// 与 HTTP 请求相关的信息大部分以 HTTP_ 开始

get_defined_functions

返回一个二维数组,包含定义的函数名列表:区分 internal、user。

// get_defined_functions 返回值

array (

'internal' => array (

'zend_version',

'func_num_args',

'func_get_arg',

// ...

),

'user' => array (

'get_client_ip',

'get_client_device',

'get_client_browser',

),

);

get_defined_constants

返回定义的常量数组,常量名作为 key,常量值作为 value。

get_defined_vars

返回定义的变量数组。

extract

将数组的成员导入到当前作用域。

$a = array(

'b' => 'b',

);

extract($a);

echo $b; // 输出字符串 b

// 如果数组的成员与当前变量名重名会发生什么?

作者: 袖之欢

科技改变生活,编程改变世界。查看袖之欢的所有文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值