PHP代码规范
PHP代码规范

代码要有洁癖。—— LiamHsia

上面这段话是我对自己的写代码的要求,好的代码习惯的作用无疑是巨大的,甚至超过代码本身,优美的代码可以带来更好的可阅读性,更少的BUG,以及更加灵活的复用。但是,鉴于PHP是一门弱类型语言,想要写好优美的代码,并不是那么容易的一件事情,这就需要一些规范来进行约束。

下面是一些我个人的代码规范,希望读者能够有所借鉴,当然,个人规范并不是适用每个人,适合自己,适合团队才是最好的。

强制性规范

每一个PHP程序员都应该阅读PHP-FIG制定的PSR规范,这里是我对自己强制性要求,包括:基础编码规范编码风格规范自动加载规范

SOLID原则

在 程序设计领域, SOLID(单一功能、开闭原则、里氏替换、接口隔离以及依赖反转)是由罗伯特·C·马丁在21世纪早期引入的记忆术首字母缩略字。

在前面的文章,已经介绍过SOLID原则,其中值得我们着重注意的是单一功能原则开放封闭原则依赖翻转原则

单一功能原则

一个类只应承担一种责任。换句话说,让一个类只做一件事。如果需要承担更多的工作,那么分解这个类。

这个原则保证了代码的低耦合性,从横向的业务逻辑来说,不同职责的类应该拆分开来,比如说:登录和注册两个功能就应该要分开,不能掺杂在一起。并且,从纵向项目架构来说,ControllerServiceRepositoryModel等分层逻辑也应该明确各自的职责。

  • Controller 用来接收通过路由传递过来的数据,并对数据进行清洗和整理,递交给 Service
  • Service 层更加贴近业务逻辑,复杂的逻辑在这里开始分解,组合。
  • Repository 层更加贴近数据逻辑,对数据库的读写操作。
  • Model 仅仅当做Eloquent的类,无其他实质作用。

开放封闭原则

实体应该对扩展是开放的,对修改是封闭的。即,可扩展(extension),不可修改(modification)。这也是为什么我们在框架中使用事件分发,而不是直接在控制器中编写逻辑代码的原因。

依赖反转原则

依赖反转原则的目的是把高层次组件从对低层次组件的依赖中解耦出来,这样使得重用不同层级的组件实现变得可能。在Laravel框架中,主要体现在依赖注入上,灵活地使用依赖注入可以大大简化代码的耦合性。

代码的自解释性

当一段代码没有注释的时候,这段代码也能被人读懂,这被称之为自解释性,这就要求我们尽量去写简洁易懂的代码,以下几点需要注意:

代码分块

相同功能的代码尽量放在一块,然后用回车做分隔,比如,若干个变量赋值。

表达式提取为变量

一个表达式如果包含两个以上的逻辑,就可以提取为变量,而不是直接使用,比如,判断报名人数是否超过最大人数,最大人数为-1表示不限制。

可以改写为:

这里只是举个例子,具体的应用场景需要大家自己判断。

变量和函数命名

最重要的一点是,要和团队保持一致,和整体保持一致,不能驼峰法和下划线混用。

由于每个人的英语水平参差不齐,但还是要保证变量命名的准确性,千万不能用$a$b$temp这类初级者使用的变量名。

函数命名可以遵循下面几点:

  • 避免使用语义模糊的动词,比如“handle”或“manage”:handleLinks(), manageObjects() 我们很难理解这些方法到底是用来干什么的?
  • 使用主动动词:cutGrass(), sendFile();
  • 暗示返回值:getMagicBullet(), readFile();
  • 使用类型约束,如果是PHP7以后的版本使用返回值类型申明。

更多代码自解释性内容,可以参见下面的地址:http://bubkoo.com/2016/09/08/15-ways-to-write-self-documenting-javascript

代码注释

每个函数都应该在函数定义前写上注释,其中包括,参数名,参数类型,和参数大意,以及返回值类型,参考可见上图。

变量的注释并不是必须的,当该变量名无法更好体现本身的意思时需要加上注释。

和团队风格保持一致

一个人写代码风格可以多变,但在一个团队中,跟其他人合作就需要注意要保持风格的一致了,比如,等号对不对齐,下划线还是驼峰法,等等,这些需要入职的时候,仔细阅读团队代码,然后再动手开始编写。


If You Have Any Question, You Can Contact Me Through liam@blue7wings.com, @Blue7Wings, #Liam_Hsia