├── LICENSE ├── README.md ├── php-basic-coding-standard.md └── php-cs-fixer-rules.md /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 刘小乐 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # php-backend-standards 2 | 3 | 本文档旨在规范 PHP 开发中的编码以及数据库设计等工作。 4 | 5 | 其中 PHP 基本编码规范基本上采取 [PSR-1](http://www.php-fig.org/psr/psr-1/) 与 [PSR-2](http://www.php-fig.org/psr/psr-2/) 的标准,在此基础上做了一些扩充。 -------------------------------------------------------------------------------- /php-basic-coding-standard.md: -------------------------------------------------------------------------------- 1 | # PHP 基本编码规范 2 | 3 | **本规范参考 [PSR-1](http://www.php-fig.org/psr/psr-1/) 与 [PSR-2](http://www.php-fig.org/psr/psr-2/),在此标准之上做了更严格的限制和扩充。** 4 | 5 | 本规范仅适用于 **PHP 5.4** 以上版本。 6 | 7 | ## 1.文件与行 8 | 9 | - PHP 代码文件**必须**以 `` 结束标签; 15 | - 视图文件中的 PHP 代码(模板代码除外)**必须**使用 `` 长标签 或 `` 短输出标签;**一定不可**使用其它自定义标签。 16 | - 每行的字符数**应该**保持在80个之内, **不应该**多于120个; 17 | - 非空行后**一定不能**有多余的空格符; 18 | - 每行**一定不能**存在多于一条语句。 19 | 20 | ## 2.类、方法与属性 21 | 22 | - PHP代码中**应该**只定义类、函数、常量等声明或只定义其他会产生 `从属效应` 的操作(如:生成文件输出、引入文件以及修改 ini 配置文件等),二者只能选其一; 23 | - 命名空间以及类**必须**符合 PSR 的自动加载规范:PSR-4; 24 | - 类的命名**必须**遵循 `StudlyCaps` 大写开头的驼峰命名规范; 25 | - 类中的常量所有字母都**必须**大写,单词间用下划线分隔; 26 | - 方法名称**必须**符合 `camelCase` 式的小写开头驼峰命名规范; 27 | - `use`声明**必须**位于`namespace`声明之后, 每个 `namespace` 命名空间声明语句块和 `use` 声明语句块后面,**必须**插入一个空白行; 28 | - 类与方法的开始花括号(`{`)**必须**写在函数声明后自成一行,结束花括号(`}`)也**必须**写在函数主体后自成一行; 29 | - 关键词 `extends` 和 `implements`**必须**写在类名称的同一行; 30 | - 需要添加 `abstract` 或 `final` 声明时, **必须**写在访问修饰符前,而 `static` 则**必须**写在其后; 31 | - 类的属性和方法**必须**添加访问修饰符(`private`、`protected` 以及 `public`),**不要**使用下划线`_`作为前缀来区分属性是 protected 或 private; 32 | - 每条语句**一定不能**定义超过一个属性,**一定不可**使用关键字 `var` 声明一个属性; 33 | - 方法及函数的声明和调用时,方法名或函数名与参数左括号之间**一定不能**有空格,参数左括号后与右括号前也**一定不能**有空格,参数列表中每个逗号后面**必须**要有一个空格,而逗号前面**一定不能**有空格。 34 | 35 | ## 3.控制结构 36 | 37 | - 控制结构的关键字后**必须**要有一个空格,右括号 `)` 与开始花括号 `{` 间也**一定**有一个空格; 38 | - 控制结构的开始花括号(`{`)**必须**写在声明的同一行,而结束花括号(`}`)**必须**写在主体后自成一行; 39 | - 控制结构转折(`else`、`else if`、`catch` 以及 `do ... while` 结构中的 `while`)关键字与上一结构体的结束花括号(`}`)**必须**写在同一行中,两者之间**一定**有一个空格; 40 | - 条件括号左括号后与右括号前**一定不能**有空格,两个子句句之间(分号之后)一定有一个空格; 41 | - 每个结构体的主体都**必须**被包含在成对的花括号之中。 42 | 43 | ## 4.闭包 44 | 45 | - 闭包声明时,关键词 `function` 后以及关键词 `use` 的前后都**必须**要有一个空格; 46 | - 开始花括号**必须**写在声明的同一行,结束花括号**必须**紧跟主体结束的下一行; 47 | - 参数列表和变量列表的左括号后以及右括号前,**必须不能**有空格; 48 | - 参数和变量列表中,逗号前**必须不能**有空格,而逗号后**必须**要有空格。 49 | 50 | ## 5.变量与关键字 51 | 52 | - PHP所有 [关键字](http://php.net/manual/en/reserved.keywords.php) **必须**全部小写,常量 `true` 、`false` 和 `null` 也**必须**全部小写; 53 | - `array`、`emtpy`、`isset`、`unset` 等关键字括号内的变量两端**必须不能**有多余的空格; 54 | - 变量声明**应该**使用下划线分隔的小写字母,**不应该**使用非通用的单词简写,**不应该**出现英文以外的拼写或简写; 55 | - 变量赋值和比较(包括控制结构条件语句和数组中)的操作符(`=`、`>`、`<` 以及 `=>`)两端**必须**各有一个空格,但自增(`++`)自减(`--`)操作变量与符号之间**一定不能**有空格; 56 | - 数组声明和使用都**应该**使用`[]` 代替 `array()`; 57 | - 需要换行数组变量的声明,数组开始符号(`[` 或 `array(`)**应该**和操作符在同一行,数组的第一个元素**应该**在新的一行开始,且与上一行之间**必须**保持一个缩进,数组的结束符号(`[` 或 `]`)必须新起一行,且**应该**与变量的第一个字符对齐。 58 | -------------------------------------------------------------------------------- /php-cs-fixer-rules.md: -------------------------------------------------------------------------------- 1 | # Basic php-cs-fixer rules 2 | 3 | ```php 4 | files() 8 | ->name('*.php') 9 | ->exclude('vendor') 10 | ->exclude('tests') 11 | ->in(__DIR__) 12 | ->ignoreDotFiles(true) 13 | ->ignoreVCS(true); 14 | 15 | $fixers = [ 16 | '-psr0', 17 | '-php_closing_tag', 18 | 'duplicate_semicolon', 19 | 'empty_return', 20 | 'extra_empty_lines', 21 | 'include', 22 | 'list_commas', 23 | 'namespace_no_leading_whitespace', 24 | 'no_blank_lines_after_class_opening', 25 | 'no_empty_lines_after_phpdocs', 26 | 'object_operator', 27 | 'operators_spaces', 28 | 'phpdoc_indent', 29 | 'phpdoc_no_access', 30 | 'phpdoc_no_package', 31 | 'phpdoc_scalar', 32 | 'phpdoc_to_comment', 33 | 'phpdoc_trim', 34 | 'phpdoc_type_to_var', 35 | 'phpdoc_var_without_name', 36 | 'remove_leading_slash_use', 37 | 'remove_lines_between_uses', 38 | 'self_accessor', 39 | 'single_array_no_trailing_comma', 40 | 'single_blank_line_before_namespace', 41 | 'single_quote', 42 | 'spaces_before_semicolon', 43 | 'spaces_cast', 44 | 'standardize_not_equal', 45 | 'ternary_spaces', 46 | 'trim_array_spaces', 47 | 'unary_operators_spaces', 48 | 'whitespacy_lines', 49 | 'multiline_spaces_before_semicolon', 50 | 'short_array_syntax', 51 | ]; 52 | 53 | return Symfony\CS\Config\Config::create() 54 | ->level(Symfony\CS\FixerInterface::PSR2_LEVEL) 55 | ->fixers($fixers) 56 | ->finder($finder) 57 | ->setUsingCache(true); 58 | ``` 59 | --------------------------------------------------------------------------------