魔法技能指南语法糖往往为程序员提供了一种更实用的编码方法,可以使代码更简洁流畅,语义更自然。本文介绍作者编写的PHP语法糖扩展,扩展了一种全新的获取PHP超全局变量的方法。本文作者范家鹏是360技术委员会--WEBServerSub-TC的成员。1.说说语法糖首先说一下“语法糖”这个词,绝不是一个贬义词。可以给我们的开发工作带来方便。它是一种轻量级、便捷的写法,既不会对语言本身的使用造成不利影响,也不会在性能上造成损失。通常,语法糖的使用可以增加程序的可读性,降低程序的复杂度,减少编码出错的机会。对开发工程师也比较友好,可以提高我们的开发效率。优秀的语法糖应该是灵魂和思想的注入,简单书写的应用。这里我用一张图来表示:2.什么是SG?SG的全称是Superglobals,指的是全局范围内所有可用的变量。SG扩展了一种全新的获取PHP超全局变量的方法。这些超全局变量是:_SERVER、_GET、_POST、_FILES、_COOKIE、_SESSION、_REQUEST、_ENV。当然也可以应用于自定义变量的场景。非常重要的一点:很简单!2.1项目背景这个想法的出发点很简单,从扩展的名字我们应该能猜到它是干什么的。在性能最优的前提下:为了使HTTP参数获取方式简单易懂,需要对HTTP参数值进行统一的过滤、转换、解密操作。在获取HTTP参数之前,需要对HTTP参数的所有行为进行一些PredefinedOperations,需要同步仅在更新对应的PHPSuperglobal语句时使用,而不是在请求开始时扫除PHPSuperglobals。在全局语法方面,扩展了获取HTTP参数的能力。于是,SG的出现就是为了解决上述问题。它提供了更甜美的语法,目前已经发布了v3.0.0。2.2项目地址https://github.com/yulonghu/sg欢迎大家提交Issues~目前支持的PHP版本,如下图所示:3.SG的特点是简单、快速、轻量级。对PHP超全局变量的零拷贝访问。使用SG会同步更新PHP超全局变量支持取值前调用自定义函数,默认情况下,字符串变量会自动调用PHPtrim解决使用PHP超全局变量(Undefinedvariable,Undefinedoffset)时未定义系列的问题使用静态方法中,小数点用于替换PHP数组维度。当使用全局声明方式时,下划线用于代替PHP数组维度。global$variable的搜索深度是可配置的,默认为一级搜索。4.配置项(php.Value说明sg.enablePHP_INI_SYSTEMbool00Disable1Enablesg.global_levelPHP_INI_SYSTEMbool11只支持一级搜索0无限搜索sg.func_namePHP_INI_ALLchartrim默认调用PHPtrim函数,也支持自定义函数5、HashMapPHP超全局变量SGkey(关键字缩写)全局语句函数$GLOBALSnonenonesg::all()$_SERVERsglobal$ssg::get/set/has/del('s')$_GETgglobal$gsg::get/set/has/del('g')$_POSTpglobal$psg::get/set/has/del('p')$_FILESfglobal$fsg::get/set/has/del('f')$_COOKIEcglobal$csg::get/set/has/del('c')$_SESSIONnglobal$nsg::get/set/has/del('n')$_REQUESTrglobal$rsg::get/set/has/del('r')$_ENVeglobal$esg::get/set/has/del('e')6.流程图6.1全局声明方式(PHP7)6.2函数方式7.API7.1全局声明方式global$g_key,$p_key,$c_key,$s_key,$f_key,$n_key,$e_key,$r_key7.2静态方法boolsg::set(string$key,mixed$value)mixedsg::get(string$key[,mixed$default_value=null])boolsg::has(string$key)boolsg::del(string$key[,mixed$...])arraysg::all(void)8、示例8.1global声明示例8.1.1sg.global_level=1
