你以为你会写 PHP 代码

请原谅我非常标题党,能点进来看的诸位,哪一位不是写过成千上万行代码的?可是,能写代码不等于能写好代码,特别是在 PHP 这门语言上。

我前几天写了一篇文章,《你以为你了解 Laravel 的中间件》。让我没想到的是,下面的评论觉得我是在搞笑,那么简单的实现,你确定这是中间件的实现?

你打开 ThinkPHP 的官网,赫然四个大字“大道至简”。如果你学过 Python ,或者看过 Unix 的哲学,当中都会提到“简单由于繁复”。在现实的工作中,能写出简单代码都是高手。

怎么理解“简单”呢?经常听到有人说,你封装的太复杂了。要知道,封装本身就是复杂的,但是封装后使用应该要简单。封装复杂才是封装的意义。

在举一个例子,如果一个初学者第一次接触框架,不知道路由是什么?你如何和他解释呢?如果是我一行代码解释:

$route =$_GET['s'])();

为什么是 s,如果你看过 ThinkPHP 的源码你就知道了。但是有人可能会说你这也太简单了,ThinkPHP 或者 Laravel 都不是这么实现的,人家用到是反射。你是对的。但只是实现方式不同,本质是一样的。

中间件也是一样的道理,有非常多不同的实现,但是在基于 HTTP 或者 RPC 的框架中,那就是一种插件机制。只是有的地方叫做中间件,有的地方叫做插件,有的地方叫做前置后置方法,实现可以基于简单的 for 循环,可以使用洋葱模型。表现形式可以通过配置文件、可以实现接口、可以通过注解….但中间件背后的本质都是插件机制,让开发者可以在框架运行期间插入自己的代码。

然后经常会听人说“你这是过度封装”,比如我封装了 SpringBoot 中的 #[RequestBody] 这个注解,有人就认为是过度封装。如果你在 PHP 中习惯了使用数组作为数据的容器,那么这就是过度封装。如果你习惯使用类在作为传参的容器,这就不是过度封装。可见,过度封装这件事也不是绝对的,一个是要看开发者的习惯、一个是要看使用本身是不是简单。说一句极端的话,Laravel 框架对于绝大多数项目来说都是过度封装,用最优雅的框架写最不可维护的代码(这不是我们开发者的锅)。

写几段我项目中的代码,欢迎吐槽:

你以为你会写 PHP 代码

上面是控制器的实现。

你以为你会写 PHP 代码

上面是逻辑层的实现。

你以为你会写 PHP 代码

上面是单元测试的实现。

说了那么多,其实还是想说,我们都是会写代码的人,我们每个人写的代码都不一样。你以为你了解 Laravel 的中间件

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 6
zds

file

这句话我认同

1个月前 评论
苏近之 (楼主) 1个月前

在明白背后原理那一刻的兴奋,用简单的例子举例出背后逻辑,这个知识点,刻入骨髓,这种体验非常爽!

不必太过在意别人评论,而陷入 自证陷阱

保持对于别人的观点 好的,就学习,坏的,就改,偏题的,就不要理

你写的那个例子,我就觉得通俗易懂,原理本来就很简单,默默给你点赞。

1个月前 评论
苏近之 (楼主) 1个月前

最终PHP看起来越来越像JAVA。面向对象设计是Java更优秀还是c#

3周前 评论
苏近之 (楼主) 3周前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!