一个超级简单的 PHP 超全局变量管理扩展(自卖自夸)
SG 全称 Superglobals,它的诞生为了方便快捷操作 PHP 预定义的超全局变量,用户定义的超全局变量。
如果在非 CLI 模式,SG 默认托管 PHP 预定义的超全局变量, 包括常用 $_GET,$_POST,$_COOOKIE,$_SERVER,$_FILES。
使用 SG 类,可以大大的减少我们的 PHP 代码量,提高我们的开发效率。
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 进程,就安装成功啦。
mixed sg::get(string $key [, mixed $default_value = null])
bool sg::set(string $key, mixed $value)
bool sg::has(string $key)
bool sg::del(string $key)
sg.enable = On/Off
sg.auto_trim = On/Off ; Strip whitespace with PHP trim
(表格好像不好用呢,这样凑合看吧~)
|传统的获取方式 (短) | 新获取方式|
| ------------- | ------------- |
|$_GET['key'] | sg::get('g.key')|
|$_POST['key'] | sg::get('p.key')|
|$_COOKIE['key'] | sg::get('c.key')|
|$_SERVER['key'] | sg::get('s.key')|
|$_FILES['key'] | sg::get('f.key')|
|传统的获取方式 (长) | 新获取方式|
| ------------- | ------------- |
|$_GET['key']['key1']['key2'] | sg::get('g.key.key1.key2')|
|$_POST['key']['key1']['key2'] | sg::get('p.key.key1.key2')|
|$_COOKIE['key']['key1']['key2'] | sg::get('c.key.key1.key2')|
|$_SERVER['key']['key1']['key2'] | sg::get('s.key.key1.key2')|
|$_FILES['key']['key1']['key2'] | sg::get('f.key.key1.key2')|
|传统的获取方式 (isset + trim) | 新获取方式|
| ------------- | ------------- |
|$key = isset($_GET['key']) ? trim($_GET['key']) : null; | $key = sg::get('g.key');|
|$key = isset($_POST['key']) ? trim($_POST['key']) : null; | $key = sg::get('p.key');|
|$key = isset($_COOKIE['key']) ? trim($_COOKIE['key']) : null; | $key = sg::get('c.key');|
|$key = isset($_SERVER['key']) ? trim($_SERVER['key']) : null; | $key = sg::get('s.key');|
|$key = isset($_FILES['key']) ? trim($_FILES['key']) : null; | $key = sg::get('f.key');|
<?php
var_dump(sg::set('test', 'test apple'));
var_dump(sg::set('user.0.0', 'user 0 apple'));
var_dump(sg::set('user.0.1', 'user 1 apple'));
var_dump(sg::set('user.a.a', 'user a apple'));
var_dump(sg::set('user.a.b', 'user b apple'));
// 以下方式不推荐,更新 PHP 预定义的超全局变量值
var_dump(sg::set('g.key', 'value'));
var_dump(sg::set('p.key', 'value'));
var_dump(sg::set('c.key', 'value'));
var_dump(sg::set('s.key', 'value'));
var_dump(sg::set('f.key', 'value'));
以上例子输出的结果:
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
<?php
var_dump(sg::get('test', 'test apple'));
var_dump(sg::get('user');
var_dump(sg::get('not_found', 'def');
var_dump(sg::get('user.1.2.3.4'));
以上例子输出的结果:
string(10) "test apple"
array(2) {
[0]=>
array(2) {
[0]=>
string(12) "user 0 apple"
[1]=>
string(12) "user 1 apple"
}
["a"]=>
array(2) {
["a"]=>
string(12) "user a apple"
["b"]=>
string(12) "user b apple"
}
}
string(3) "def"
NULL
<?php
var_dump(sg::has('test'));
var_dump(sg::has('not_found'));
以上例子输出的结果:
bool(true)
bool(false)
<?php
var_dump(sg::del('test'));
var_dump(sg::del('user.0.1'));
var_dump(sg::get('user');
以上例子输出的结果:
bool(true)
bool(true)
array(2) {
[0]=>
array(1) {
[0]=>
string(12) "user 0 apple"
}
["a"]=>
array(2) {
["a"]=>
string(12) "user a apple"
["b"]=>
string(12) "user b apple"
}
}
演示自动过滤前后空格的例子, 支持两种方式开启自动过滤。
为了获得最佳性能,如果满足 trim 条件, sg 将改变原始值。避免每次取值时重复做 trim 操作。
<?php
ini_set('sg.auto_trim', 1);
function One() {
var_dump(sg::set('test', ' test apple ')); // Auto-call PHP trim
}
function Two() {
var_dump(sg::get('test'));
}
以上例子输出的结果:
bool(true)
string(10) "test apple"
SG is open source software under the PHP License v3.01
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.