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

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

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

说说语法糖

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

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

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

什么是SG?

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

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

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

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

1. 项目背景

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

在性能***的前提下:

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

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

2. 项目地址

https://github.com/yulonghu/sg

欢迎大家来提交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 声明方式:

静态方法

例子

1. global 声明例子

(1) sg.global_level = 1:

以上例子输出的结果:

(2) sg.global_level = 0

以上例子输出的结果:

(3) sg.func_name

以上例子输出的结果:

2. 静态方法例子

(1) get/set/has/del()

以上例子输出的结果:

(2) sg.func_name

以上例子输出的结果:

性能测试

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

default - 源码:

global 声明方式 - 源码:

default - 结果:

global 声明方式 - 结果:

总结

SG具有以下优势:

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

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

【本文是51CTO专栏机构360技术的原创文章,微信公众号“360技术( id: qihoo_tech)”】

戳这里,看该作者更多好文

责任编辑:赵宁宁 来源: 51CTO专栏
相关推荐

2016-01-06 09:57:23

编写PHP扩展

2019-05-23 11:42:04

Java语法糖编程语言

2009-11-30 18:34:22

PHP简单语法

2016-06-02 15:10:12

SwiftSelector

2022-02-14 08:04:02

Go语法糖编译器

2020-12-08 07:51:53

Java语法糖泛型

2011-03-24 09:34:41

SPRING

2016-10-14 14:04:34

JAVA语法main

2022-08-04 14:38:49

vue3.2setup代码

2018-11-22 14:09:45

iOS架构组件开发

2009-08-19 04:14:00

线性链表

2023-02-07 10:40:30

gRPC系统Mac

2017-08-21 16:36:12

语法树AST解析器HTML5

2023-02-01 16:36:31

GNOMEChatGPTLinux

2009-07-14 16:02:42

JDBC例子

2020-11-09 06:38:00

ninja构建方式构建系统

2023-01-30 09:01:34

DecoratorsJS语法

2010-01-22 17:55:23

VB.NET语法糖

2009-10-01 09:19:45

PHP框架ZendFramewoCake

2014-02-27 09:39:30

PHP技巧
点赞
收藏

51CTO技术栈公众号