腾讯正式开源高性能超轻量级PHP框架Biny,尚不成熟!

本文分析了一款PHP框架的设计问题,包括命名不规范、参数获取方法混乱及安全性隐患,强调了遵循PSR规范、现代潮流如namespace和composer的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前几天看了下代码,还没深入研究,感觉有的地方还是比较传统,没有用到多少现代化的PHP,也没有严格遵循PSR规范,没有采用现代潮流的 namespace 和 composer ,命名空间也没有。

举例:

就说一个小点。Biny演示页面 上的文档

getParam($key, $default) 获取GET/POST参数{$key}, 默认值为{$default}      
getGet($key, $default) 获取GET参数{$key}, 默认值为{$default} 
getPost($key,$default) 获取POST参数{$key}, 默认值为{$default} 
getJson($key, $default) 如果传递过来的参数为完整json流可使用该方法获取

这组 API 体现了不少问题。

  • 第一,getGet 这种无法吐槽的命名。

  • 第二,param 在不少框架里指的是 /test/{param}/ 这种形式的路由参数。

  • 第三,getGet/getPost 所体现的 get/post 参数这种称呼是错误的。实质上那是 url 上的 query 和
    request body 里按照 application/x-www-form-urlencoded 编码的参数。跟请求的 method
    是 GET 还是 POST(或者其他)并无关系。GET 请求固然只能有所谓 GET 参数,但 POST 请求就既可以有所谓 POST
    参数,又可以有 GET 参数,更不要说 PUT 请求之类的。有人或许会说这是遵循 PHP 的惯例。确实,这也是 PHP的古老而独有的槽点之一,但是既然是做框架,没有必要沿袭错误设计。(当然坚持错误不改,也算是 PHP 的惯例。)

  • 第四,getJson 这个方法的签名令人困惑。JSON 可以是单一的值,所以不确定这个 k e y 参 数 指 什 么 。 有 人 也 许 会 理 解 为 提 供 了 等 价 于 d e c o d e J S O N ( g e t P a r a m ( key 参数指什么。有人也许会理解为提供了等价于 decodeJSON(getParam( keydecodeJSON(getParam(key, $default)) 的快捷方法。看了源码之后才知道其实就是假设 JSON是一个对象,取对象上的属性。固然用 JSON 传参数通常都是包装成一个对象,但是 API设计上应注意避免引入未言明的假设,或者至少要把文档写清楚。

  • 第五,getParam这种模糊方式(随便是如何得来的参数)是历史遗迹,存在安全隐患。现代框架不应该提供。(另外这个文档和实际代码是不一致的。)

上面这些问题说大不大,说小不小,其实很多自制框架都可能犯这些错误。

坦率的说,我公司从事微信开发有六年历史。所以我们的项目大多都是直接用 laravel 之类的。倒不是说 laravel 一定有多好,但是总体上拥抱社区比自己闭门造车好。另一方面,我们的自制框架也在慢慢改进,没法改的部分也至少是要在代码或文档里写清楚是历史遗迹。总之,我们是不好意思把不良设计开源出来去误导别人的。

最后,推荐一个我们公司目前的开源项目,小程序+公众号商城,项目是全开源的:【查看演示】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值