English Document | 中文
SG 全称 Superglobals,引用全局作用域中可用的全部变量。SG丰富了PHP超全局变量获取方式。
这些超全局变量有:$_SERVER,$_GET,$_POST,$_FILES,$_COOKIE,$_SESSION,$_REQUEST,$_ENV。
SG v3.0.1 支持POST请求,原始数据流的快速读取。请参考 php://input
当然了,也可以应用到自定义变量场景。
非常重要的一点:它很简单!
- 简单,快速,轻量
- 零拷贝访问PHP超全局变量,使用SG会同步更新PHP超全局变量
- 支持取值前调用自定义函数,默认情况下,字符串变量会自动调用 PHP trim
- 解决使用PHP超全局变量时出现未定义系列的问题 (Undefined variable, Undefined offset)
- 采用函数调用方式时,以小数点代替PHP数组维度
- 采用global声明方式时,以下划线代替PHP数组维度
- 支持可配置的global $variable查找深度,默认一级查找
- 支持POST请求,原始数据流的快速读取
- PHP 5.4 +
- PHP 7.0 +
git clone https://github.com/yulonghu/sg.git
$ /path/to/php/bin/phpize
$ ./configure --with-php-config=/path/to/php/bin/php-config
$ make && make install
extension=sg.so
[sg]
sg.enable = On
重启php进程,就安装成功啦。
global $g_key, $p_key, $c_key, $s_key, $f_key, $n_key, $e_key, $r_key
array sg::all(void)
// 读取全局作用域变量, 找不到$key时,$default_value值生效
mixed sg::get(string $key [, mixed $default_value = null])
// 设置全局作用域变量,找不到$key则新增,否则更新其值; 返回值: TRUE 成功,FALSE 失败
bool sg::set(string $key, mixed $value)
// 检查全局作用域中$key是否存在; 返回值: TRUE 存在,FALSE 不存在
bool sg::has(string $key)
// 删除全局作用域中变量$key; 返回值: TRUE 成功,FALSE 失败
// 注意: 批量删除时,有且只有一个成功结果
bool sg::del(string $key [, mixed $... ])
// 读取POST请求情况下,原始数据
// 读取速度快于(30%) file_get_contents('php://input');
mixed sg::getRaw([mixed $default_value = null [, int $maxlen]])
// 读取全局作用域变量, 存储到Cache,请求结束时自动释放Cache
mixed sg::getCache(string $key [, mixed $default_value = null])
配置项 | 权限 | 类型 | 默认值 | 说明 |
---|---|---|---|---|
sg.enable | PHP_INI_SYSTEM | bool | 0 | 0 关闭 1 开启 |
sg.global_level | PHP_INI_SYSTEM | bool | 1 | 1 只支持一级查找 0 无限制查找 |
sg.func_name | PHP_INI_ALL | char | trim | 默认调用 PHP trim 函数,也支持自定义函数 |
- 管理PHP会话时(MapKey = n), 请先调用函数 session_start()
PHP 超全局变量 | SG key (关键字缩写) | global 声明 | 函数 |
---|---|---|---|
$GLOBALS | 无 | 无 | sg::all() |
$_SERVER | s | global $s | sg::get/set/has/del('s') |
$_GET | g | global $g | sg::get/set/has/del('g') |
$_POST | p | global $p | sg::get/set/has/del('p') |
$_FILES | f | global $f | sg::get/set/has/del('f') |
$_COOKIE | c | global $c | sg::get/set/has/del('c') |
$_SESSION | n | global $n | sg::get/set/has/del('n') |
$_REQUEST | r | global $r | sg::get/set/has/del('r') |
$_ENV | e | global $e | sg::get/set/has/del('e') |
<?php
$_GET['key'] = 'GET_test_key';
function testGlobal()
{
global $g_key;
var_dump($g_key);
$g_key = 'NEW_GET_test_key';
}
testGlobal();
var_dump(sg::get('g.key'));
var_dump($GLOBALS['g_key']);
var_dump($g_key);
var_dump($_GET['key']);
以上例子输出的结果:
string(12) "GET_test_key"
string(16) "NEW_GET_test_key"
string(16) "NEW_GET_test_key"
string(16) "NEW_GET_test_key"
string(16) "NEW_GET_test_key"
<?php
$_GET['key']['key1']['key2'] = 'GET_test_key';
function testGlobal()
{
global $g_key_key1_key2;
}
testGlobal();
var_dump(sg::get('g.key.key1.key2'));
var_dump($GLOBALS['g_key_key1_key2']);
var_dump($g_key_key1_key2);
var_dump($_GET['key']['key1']['key2']);
以上例子输出的结果:
string(12) "GET_test_key"
string(12) "GET_test_key"
string(12) "GET_test_key"
string(12) "GET_test_key"
<?php
ini_set('sg.func_name', 'decryptTest');
$_POST['key'] = 'IEEgQmFuYW5hIA==';
function decryptTest($data)
{
return trim(base64_decode($data));
}
global $p_key;
var_dump($p_key);
以上例子输出的结果:
string(8) "A Banana"
<?php
$key = 'test';
$val = 'A Banana';
echo "------------------start\n";
var_dump(sg::get($key));
var_dump(sg::get($key, 'def'));
var_dump(sg::has($key));
echo "------------------set\n";
var_dump(sg::set($key, $val));
echo "------------------get\n";
var_dump(sg::get($key));
var_dump(sg::get($key, 'def'));
var_dump(sg::has($key));
echo "------------------del\n";
var_dump(sg::del($key));
echo "------------------get\n";
var_dump(sg::get($key));
var_dump(sg::has($key));
以上例子输出的结果:
------------------start
NULL
string(3) "def"
bool(false)
------------------set
bool(true)
------------------get
string(8) "A banana"
string(8) "A banana"
bool(true)
------------------del
bool(true)
------------------get
NULL
bool(false)
结果与 $GLOBALS 相同
<?php
ini_set('sg.func_name', 'decryptTest');
function decryptTest($data)
{
return trim(base64_decode($data));
}
function encryptTest($data)
{
return base64_encode(trim($data));
}
sg::set('user', encryptTest(' A Banana '));
var_dump(sg::get('user'));
以上例子输出的结果:
string(8) "A Banana"
SG is open source software under the PHP License v3.01