作者简介:

       姜海强:闷骚码农,互联网行业摸爬滚打数余载,先后担任中国体育直播TV主程、网信集团先锋支付架构师、奇虎360服务器端资深开发。热爱技术,喜欢分享,热衷领域:PHP/Golang语言、面向对象设计模式、Redis、Yaf、Yii2、微服务等。

视频课程

yaf+yar微服务-腾讯课堂
yaf+yar微服务-51CTO学院
CSDN学院

Github

个人主页
swoole-boot
roach
roach-orm

QQ群:

姜海强的QQ群

公众号:

360tryst公众号

编码规范

1. 代码清晰度

无规矩不成方圆,编程也是有套路的,好的代码不仅要好的性能,还要有好的规范。

如果代码没有按照一定的规范进行编写,那么代码的可维护性就会很差,相信任何人都不太愿意接手不规范的代码。代码的清晰度是一个衡量开发人员编码素质的重要标准。

2. PSR规范

每一个编程语言都有自己的编码规范,PHP也不例外,PHP语言公认的编码规范就是PSR规范,PSR规范官方网址https://www.php-fig.org/psr/

PSRPHP Standard Recommendations的简写,由PHP FIG组织制定的PHP规范,FIGFramework Interoperability Group(框架可互用性小组)的缩写,由几位开源框架的开发者成立于 2009 年,从那开始也选取了很多其他成员进来(包括但不限于Laravel, Joomla, Drupal, Composer, Phalcon, Slim, Symfony, Zend Framework等)。

  • 2.1 psr规范
规范名称 内容
psr-1 语法规范
psr-3 日志接口规范
psr-4 类自动加载规范
psr-6 缓存接口规范
psr-11 容器接口规范
psr-16 简单缓存接口规范
  • 2.2 PSR规范术语
术语 含义
MUST 必须
MUST NOT 一定不能
REQUIRED 需要
SHALL 将会
SHALL NOT 不会
SHOULD 应该
SHOULD NOT 不应该
RECOMMENDED 推荐
MAY 可以
OPTIONAL 可选的

3. PSR-1

PSR-1规范主要对PHP文件及语法做了规范,主要内容如下。

  • Files MUST use only <?php and <?= tags
  • Files MUST use only UTF-8 without BOM for PHP code
  • Files SHOULD either declare symbols (classes, functions, constants, etc.) or cause side-effects (e.g. generate output, change .ini settings, etc.) but SHOULD NOT do both
  • Namespaces and classes MUST follow an “autoloading” PSR: [PSR-0, PSR-4]
  • Class names MUST be declared in StudlyCaps
  • Class constants MUST be declared in all upper case with underscore separators
  • Method names MUST be declared in camelCase

4. 符合PSR-1规范的示例类

region注释块对Phpstorm ide友好,阅读代码的时候可以折叠,建议在实际开发中将相关联代码块整体用region注释块标注功能,便于阅读代码。

  1. <?php
  2. //文件名以<?php开始,命名空间和目录保持一致,遵从PSR-4类自动加载
  3. namespace app\models;
  4. //类名称使用大驼峰
  5. class UserModel
  6. {
  7. //region 1.1 常量规范
  8. //常量所有单词全部大写,单词间用下划线分隔
  9. const SOURCE_PC = 1;
  10. const SOURCE_ANDROID = 2;
  11. const SOURCE_IOS = 3;
  12. const SOURCE_WEIXIN = 4;
  13. //endregion
  14. //region 1.2 属性规范
  15. //public属性使用小驼峰
  16. public $userId;
  17. //static属性规范与实例属性规范一致
  18. public static $sourceMap = [
  19. self::SOURCE_PC => 'PC',
  20. self::SOURCE_ANDROID => 'ANDROID',
  21. self::SOURCE_IOS => 'IOS',
  22. self::SOURCE_WEIXIN => 'WEIXIN',
  23. ];
  24. //protected属性使用下划线开头,单词遵从小驼峰
  25. protected $_loginTimes = 0;
  26. //static属性规范与实例属性规范一致
  27. protected static $_dataPool;
  28. //private属性使用下划线开头,单词遵从小驼峰
  29. private $_createTime;
  30. //static属性规范与实例属性规范一致
  31. private static $_objectPool;
  32. //只读属性实现
  33. public function getCreateTime()
  34. {
  35. return $this->_createTime;
  36. }
  37. //endregion
  38. //region 1.3 方法规范
  39. //public方法名称使用小驼峰
  40. public function getInfo($id)
  41. {
  42. }
  43. //static方法规范与实例方法规范一致
  44. public static function getDb()
  45. {
  46. }
  47. //protected方法以下划线开头,单词遵从小驼峰
  48. protected function _formatInfo($info = [])
  49. {
  50. }
  51. //static方法规范与实例方法规范一致
  52. protected static function _getData($key)
  53. {
  54. }
  55. //private方法以下划线开头,单词遵从小驼峰
  56. private function _initSource()
  57. {
  58. }
  59. //static方法规范与实例方法规范一致
  60. private function _getObject($key)
  61. {
  62. }
  63. //endregion
  64. }

好了,看到这里你已经掌握了PSR-1规范的大部分内容了,你离大神的距离又近了一步了哦!加油!

QQ群:

姜海强的QQ群

公众号:

360tryst公众号