php 全局变量_SG:一个简单的PHP语法糖扩展

奇技指南

语法糖往往给程序员提供了更实用的编码方式,可以使代码更简洁流畅,语义更自然。本文介绍笔者自己写的PHP语法糖扩展,扩展了一种全新的PHP超全局变量获取方式。

本文作者范家鹏,360技术委员会--WEB服务端分TC委员。

db87a0cde410646dcb52daa97c93f9e7.png

说说语法糖

首先说说“语法糖”这个词绝非贬义词,它可以给我们的开发工作带来便利,是一种轻量级便捷的写法,既不会对语言本身的使用造成不利影响,也不会在性能上带来损失。

通常情况下,使用语法糖能够增加程序的可读性,减少程序复杂性,减少编码中出错的机会,也对开发工程师具有友好性,能够提升我们的开发效率。

优秀的语法糖,应该是一种灵魂思想的注入,简单写法的应用。我这里用一幅图来表示:

7142efb68e8a64ea6965133bfc5b78ab.png

什么是SG?

SG 全称 Superglobals,引用全局作用域中可用的全部变量。SG扩展了一种全新的PHP超全局变量获取方式。

这些超全局变量是:_SERVER,_GET,_POST,_FILES,_COOKIE,_SESSION,_REQUEST,_ENV。

当然了,也可以应用到自定义变量场景。

非常重要的一点是:它很简单

项目背景

这个idea出发点很简单,从扩展名称我们应该能猜到它是做什么的。

在性能最优的前提下:

  • 能通俗易懂地简化HTTP参数获取方法
  • 需要对HTTP参数值进行统一过滤、转换、解密操作
  • 获取HTTP参数前,需要进行一些Predefined Operation
  • 针对HTTP参数的一切行为,需要同步更新对应的PHP Superglobal
  • 声明时才使用,而非请求一开始就对PHP Superglobals扫荡式处理
  • 在global语法上,扩展一项能获取HTTP参数的能力

So,SG出现就是为了解决上面这些问题而来,它提供了一种更加甜蜜的语法,当前已经发布了v3.0.0。

项目地址

https://github.com/yulonghu/sg

欢迎大家来提交Issues~

当前支持的PHP版本,如下图所示:

f52b172fe59a90c8a20b2155c008fc24.png

SG的特性

  • 简单,快速,轻量
  • 零拷贝访问PHP超全局变量,使用SG会同步更新PHP超全局变量
  • 支持取值前调用自定义函数,默认情况下,字符串变量会自动调用 PHP trim
  • 解决使用PHP超全局变量时出现未定义系列的问题 (Undefined variable, Undefinedoffset)
  • 采用静态方法时,以小数点代替PHP数组维度
  • 采用global声明方式时,以下划线代替PHP数组维度
  • 支持可配置的global $variable查找深度,默认一级查找

配置项(php.ini)

a4f965d03b26a42ae6d43265c69983ba.png

Hash Map

3ba3b80d6be5ad24103b6b71558f0997.png

流程图

global 声明方式(PHP7)

c2a475711d59a3175717a4ab623b4d62.png

函数方式

7573cfa5979c55cf3c6fc061fa3eb9c3.png

API

global 声明方式

6622076b1d164cf8c368cd3e67db4e8c.png

静态方法

1393c86a31e4fbbe4629e0b35bae73b0.png

例子

global 声明例子

sg.global_level = 1

82684725b59f8edccc756d244465a2f8.png
7aa547428de3085d2f8c3a3d9e25dd98.png

以上例子输出的结果:

8da83e06db951ad3c1de918793efc69b.png

sg.global_level = 0

8583f45d7eef8dbcabb768c4edc05e67.png

以上例子输出的结果:

56156114aba0c95503cf19c330a45653.png

sg.func_name

56793a851d71b52d30ff85c9118aaeec.png

以上例子输出的结果:

922b5bfb831fb3055d6c732d22bba63b.png

静态方法例子

get/set/has/del()

a65bfba48ac0078dc844d72c9f67efbe.png
b1d2e28e91d8ab9f43ffb49efa510344.png

以上例子输出的结果:

9c7a1c76858e859f38511d2bc9a676d6.png

sg.func_name

1fddc0c2c8c2598195be0b33a30d2987.png

以上例子输出的结果:

1d90dda5632f74a641df3a25f91a3adc.png

性能测试

噼里啪啦说了大半天,性能到底怎么样呢?我在本地环境做了一个简单的ab测试(ab -c100 -n10000),PHP测试代码如下:

default - 源码

dfbe67b03327335e6ea7152cc6b8652d.png

global 声明方式 - 源码

5bdaf4458c5300eb8354a3e55707da02.png

default - 结果

f606a16d2f057dfbe1278c7add66502a.png
8ed51c019e43af8e60dda909d55b8982.png

global 声明方式 - 结果

3fbcbdaa75bd01436c5862087c21ac99.png

总 结

SG具有以下优势:

  • 兼容了当前的主流PHP版本
  • 提供了一种更加甜蜜的语法,丰富了Superglobals的应用
  • 我们始终相信:简单才是王道

注意:global 声明方式,当前只支持不可变变量名。

关于360技术

360技术是360技术团队打造的技术分享公众号,每天推送技术干货内容

更多技术信息欢迎关注“360技术”微信公众号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值