Code前端首页关于Code前端联系我们

superglobals:PHP预定义的超全局变量管理扩展

terry 2年前 (2023-09-25) 阅读数 48 #后端开发

SG的全称是Superglobals。它的诞生是为了方便快捷地处理PHP预定义的超全局变量和用户定义的超全局变量。

如果在非 CLI 模式下,SG PHP 默认托管预定义的超级全局变量,包括 $_GET、$_POST、$_COOKIE、$_SERVER、$_FILES。

使用SG类可以使复杂的代码变得更简单。启用自动过滤还可以减少代码量,从而提高我们的开发效率。

高亮功能

  • 简单、快速、轻量
  • 全局变量零拷贝访问
  • 支持自动过滤PHP修剪前后的空格PHP变量未定义(未定义变量、未定义偏移)的问题

安装

PHP版本支持包括

  • PHP 5.4 +
  • PHP 7.0 +❀❀
    $ /path/to/php/bin/phpize
    $ ./configure --with-php-config=/path/to/php/bin/php-config
    $ make && make install
    复制代码

    php。 ini,add,开启扩展

    extension=sg.so
    
    [sg]
    sg.enable = On复制代码

    并重启php-fpm即可安装成功。

    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 预定义的超全局变量

    OLD GETHO METHO❝W D
    $_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')
    旧获取方法 (Lang)新获取方法
    $_GET['key']['key1']['key2'] sg ::get('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 + 修剪)新获取方法
    $key = isset($_GET['key']) ?修剪($_GET['key']) : null;$key = sg::get('g.key');
    $key = isset($_POST['key']) ?修剪($_POST['key']) : null;$key = sg::get('p.key');
    $key = isset($_COOKIE['key']) ?修剪($_COOKIE['key']) : null;$key = sg::get('c.key');
    $key = isset($_SERVER['key']) ?修剪($_SERVER['key']) : null;$key = sg::get('.key');
    $ key = isset($_FILES['key']) ? trim($_FILES['key']) : null;$key = sg::get('f.key');
    (PHP7) 传统获取方式(??)新获取方式
    $key = $_GET['key'] ??零; $key = trim($key);$key = sg::get('g.key');
    $key = $_POST['key'] ??零; $key = 修剪($key);$key = sg::get('p.key' );
    $key = $_COOKIE['key'] ??零; $key = trim($key);$key = sg::get('c.key');
    $key = $_SERVER['key'] ??零; $key = 修剪($key);$key = sg::get('s.key');
    $key = $_FILES['key'] ??零; $key = trim($key);$key = sg::get('f.key');

    通过上面的安排,我们可以得出一个结论,传统的value方法很容易出错。如果数组维度更深,代码复杂度会大大增加

    使用SG这些情况变得非常简单。更新和删除方法类似。

    设置超全局变量

    sg::set

    <?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'));复制代码

    上例输出结果:

    bool(true)
    bool(true)
    bool(true)
    bool(true)
    bool(true)
    复制代码

    sg::get

    <?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'));复制代码

    上例输出结果:s:s:s

    <?php
    var_dump(sg::has('test'));
    var_dump(sg::has('not_found'));复制代码

    上例输出结果:

    bool(true)
    bool(false)
    复制代码

    sg::del

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

    在自动过滤空格示例之前和之后。有两种方法可以启用自动过滤。

    <?php
    // sg.auto_trim = On ; php.ini
    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"

    作者:fanjiapeng
    链接:https://juejin.im/post/5c9edcb56fb9a05e505c4359❙❀❀版权所有:作者。商业转载请联系作者获取授权。非商业转载请注明出处。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门