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

前几天看了下代码,还没深入研究,感觉有的地方还是比较传统,没有用到多少现代化的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 可以是单一的值,所以不确定这个 $key 参数指什么。有人也许会理解为提供了等价于
decodeJSON(getParam($key, $default)) 的快捷方法。看了源码之后才知道其实就是假设 JSON是一个对象,取对象上的属性。固然用 JSON 传参数通常都是包装成一个对象,但是 API设计上应注意避免引入未言明的假设,或者至少要把文档写清楚。

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

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

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

 


 

> 最后,推荐一个我们公司目前的开源项目,小程序+公众号商城,项目是全开源的,演示地址:https://github.crmeb.net/u/download

posted on 2019-03-04 15:38  你好呀李银河  阅读(103)  评论(0编辑  收藏  举报

导航