一個超級簡單的PHP超全局變量管理擴展

介紹

SG 全稱 Superglobals,它的誕生爲了方便快捷操做PHP預約義的超全局變量,用戶定義的超全局變量。php

若是在非CLI模式,SG默認託管PHP預約義的超全局變量, 包括經常使用 $_GET,$_POST,$_COOOKIE,$_SERVER,$_FILES。git

使用SG類,能讓複雜的代碼變得簡單,開啓自動過濾還能減小代碼量,進而提升咱們的開發效率。github

亮點功能

  • 簡單,快速,輕量
  • 零拷貝訪問全局變量
  • 支持自動過濾先後空格PHP trim
  • 解決操做PHP全局變量時出現未定義系列的問題 (Undefined variable, Undefined offset)

安裝

PHP版本支持包括

  • PHP 5.4 +
  • PHP 7.0 +

下載源碼

git clone https://github.com/yulonghu/sg.git

Linux系統,編譯SG擴展

$ /path/to/php/bin/phpize
$ ./configure --with-php-config=/path/to/php/bin/php-config
$ make && make install

php.ini,添加、開啓擴展

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)

支持的INI配置項

sg.enable = On/Off
sg.auto_trim = On/Off ; Strip whitespace with PHP trim

詳細例子

獲取PHP預約義的超全局變量

傳統的獲取方式 (短) 新獲取方式
$_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');
(PHP7) 傳統的獲取方式 (??) 新獲取方式
$key = $_GET['key'] ?? null; $key = trim($key); $key = sg::get('g.key');
$key = $_POST['key'] ?? null; $key = trim($key); $key = sg::get('p.key');
$key = $_COOKIE['key'] ?? null; $key = trim($key); $key = sg::get('c.key');
$key = $_SERVER['key'] ?? null; $key = trim($key); $key = sg::get('s.key');
$key = $_FILES['key'] ?? null; $key = trim($key); $key = sg::get('f.key');

經過以上的整理,能夠得出一個結論,傳統取值方式容易出錯,若是數組維度越深,代碼複雜度會直線上升。app

使用SG,這些狀況都變得很簡單。更新、刪除方式類同。性能

設置超全局變量

bool sg::set(string $key, mixed $value)

<?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'));

以上例子輸出的結果:spa

bool(true)
bool(true)
bool(true)
bool(true)
bool(true)

bool(true)
bool(true)
bool(true)
bool(true)
bool(true)

mixed sg::get(string $key [, mixed $default_value = null])

<?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'));

以上例子輸出的結果:.net

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

bool sg::has(string $key)

<?php
var_dump(sg::has('test'));
var_dump(sg::has('not_found'));

以上例子輸出的結果:code

bool(true)
bool(false)

bool sg::del(string $key)

<?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"
  }
}

sg.auto_trim

演示自動過濾先後空格的例子, 支持兩種方式開啓自動過濾。

爲了得到最佳性能,若是知足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"

License

SG is open source software under the PHP License v3.01

相關文章
相關標籤/搜索