2020 Google开发者大会重磅开幕 了解详情

SG :一个简单的PHP语法糖扩展

2019 年 11 月 18 日

SG :一个简单的PHP语法糖扩展

语法糖往往给程序员提供了更实用的编码方式,可以使代码更简洁流畅,语义更自然。本文介绍一个简单的 PHP 语法糖扩展,扩展了一种全新的 PHP 超全局变量获取方式。本文来自公众号“360 技术”的投稿,作者范家鹏,360 技术委员会–WEB 服务端分 TC 委员。


说说语法糖


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


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


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



什么是 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。项目地址


欢迎大家来提交 Issues~


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



SG 的特性


  • 简单,快速,轻量

  • 零拷贝访问PHP超全局变量,使用SG会同步更新PHP超全局变量

  • 支持取值前调用自定义函数,默认情况下,字符串变量会自动调用 PHP trim

  • 解决使用PHP超全局变量时出现未定义系列的问题 (Undefined variable, Undefinedoffset)

  • 采用静态方法时,以小数点代替PHP数组维度

  • 采用global声明方式时,以下划线代替PHP数组维度

  • 支持可配置的global $variable查找深度,默认一级查找


配置项(php.ini)



Hash Map



流程图


global 声明方式(PHP7)



函数方式



API


global 声明方式



静态方法



例子


global 声明例子


sg.global_level = 1




以上例子输出的结果:



sg.global_level = 0



以上例子输出的结果:



sg.func_name



以上例子输出的结果:



静态方法例子


get/set/has/del()




以上例子输出的结果:



sg.func_name



以上例子输出的结果:



性能测试


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


default - 源码



global 声明方式 - 源码



default - 结果




global 声明方式 - 结果




总结


SG 具有以下优势:


  • 兼容了当前的主流PHP版本

  • 提供了一种更加甜蜜的语法,丰富了Superglobals的应用

  • 我们始终相信:简单才是王道


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


本文转载自公众号 360 云计算(ID:hulktalk)。


原文链接:


https://mp.weixin.qq.com/s/zb98V_BaFdrd9KB2qf-71g


2019 年 11 月 18 日 13:53 510

评论

发布
暂无评论
发现更多内容

职场寒冬,给你讲四个小故事

池建强

人生 职场

PyTorch 1.5 发布,与 AWS 合作 TorchServe

神经星星

人工智能 facebook 微软 亚马逊云 AWS Lightsail 工具

Linux-常用命令

蜗牛前进

Linux

2020版Kubernetes快速上手指南,让你所见即所得

ABC实验室

Kubernetes 容器 云原生 群集安装 新手指南

5G来临,我们该如何打造自己的家庭数据中心基础篇

ABC实验室

5G 数字资产 家庭数据中心

理解 Java 序列化

RookieMZL

扎心!天天写代码,方向真的对吗?

Apache Flink

大数据 flink 流计算 实时计算 大数据处理

我是如何读完技术书,然后忘得一干二净的

ayesd

读书 读书方式

使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (二)为什么要写单元测试

编程道与术

编程 编程语言 TDD 代码审查 单元测试

最新Idea 2020.1 二种方法激活教程

公众号:V5codings

intellij-idea

2020年程序猿必读10本好书推荐

ABC实验室

学习 2020 程序员 好书推荐

从"远程工作"到"分布式团队"

Yanel 说敏捷产品

项目管理 敏捷 敏捷开发

Oracle 将为职场歧视买单,4100 位女员工集体诉讼

神经星星

oracle 互联网巨头 互联网 职场

tcp_tw_recycle 【坑】

孤星可

TCP 服务端

自动化测试框架知识,读这一篇就够了!

程序员 DevOps 自动化 测试

Mac效率配置指南

Winann

macos 效率 效率工具 Mac

做一个"靠谱"的敏捷教练

Yanel 说敏捷产品

敏捷 敏捷开发

听保洁老大爷讲Java的垃圾回收

侯树成

JVM

给程序员的错误找个台阶

曲水流觞TechRill

如何度量敏捷开发团队

Yanel 说敏捷产品

敏捷 敏捷开发

我的理财小心得

史前靓仔

游戏夜读 | 游戏数据分析师

game1night

python 文章中图片下载

蜗牛前进

聊聊“坚持”这件事

小天同学

个人成长 写作 坚持 自控力

人是一切

Neco.W

个人感想 感悟

常用电脑软件清单

彭宏豪95

软件 工具 windows 生产力

为什么公众号订阅没有「分组」的功能?

Fenng

微信公众平台 产品设计

freecplus框架,Linux平台下C/C++程序员提高开发效率的利器

C语言技术网-码农有道

你懂什么是"结对测试"么?

Yanel 说敏捷产品

产品 产品经理 产品设计 产品开发 产品推荐

企业经营 "造物" "造人" "造钱"三阶段

Yanel 说敏捷产品

敏捷 敏捷开发

学会用"云—雨—伞"引导敏捷实践

Yanel 说敏捷产品

敏捷 敏捷开发

全球首发的中国原创--“飞算全自动软件工程平台”产品发布会

全球首发的中国原创--“飞算全自动软件工程平台”产品发布会

SG :一个简单的PHP语法糖扩展-InfoQ