-
1. 所有的类必须设定一个命令空间
-
2. 命名空间(namespace)的声明后面必须有一行空行
-
3. 所有的导入(use)声明必须放在命名空间(namespace)声明的下面
-
4. 一句声明中,必须只有一个导入(use)关键字
-
5. PHP 关键字必须小写
-
6. 继承(extends) 和实现(implement) 必须和 class name 写在一行,切花括号要换行写
-
7. 成员属性访问修饰符必须显示声明不能省略
-
8. 成员方法访问修饰符必须显示声明不能省略
-
9. 方法的参数有多个的时候,每个参数的逗号后面必须加个空格
-
10. 当用到抽象(abstract)和终结(final)来做类声明时,它们必须放在可见性声明(public 还是protected还是private)的前面。而当用到静态(static)来做类声明时,则必须放在可见性声明的后面。
-
11. 控制结构花括号、换行、空格等规范
-
12. 类名必须与文件名一致
-
13. 类的命名必须遵循 StudlyCaps 大写开头的驼峰命名规范
-
14. 方法名称必须符合 camelCase 式的小写开头驼峰命名规范
-
15. 类中的常量所有字母都必须大写,单词间用下划线分隔
-
16. 变量必须使用小驼峰命名风格
-
17. 参数必须使用驼峰命名风格
-
18. 所有方法的起始花括号必须另起一行
-
19. 直接在方法中写数组参数时格式如下
-
20. 方法参数注释
-
21. 方法的代码行数不能超过一屏
1. 所有的类必须设定一个命令空间
<?php
namespace core;
2. 命名空间(namespace)的声明后面必须有一行空行
<?php
namespace core;
use common;
3. 所有的导入(use)声明必须放在命名空间(namespace)声明的下面
<?php
namespace core;
use common;
4. 一句声明中,必须只有一个导入(use)关键字
错误:
<?php
namespace core;
use common, library;
正确:
<?php
namespace core;
use common;
use library;
4. 在导入(use)声明代码块后面必须有一行空行
<?php
namespace core;
use common;
use library;
class Person
{
}
5. PHP 关键字必须小写
'abstract', 'and', 'array', 'as', 'break', 'callable', 'case', 'catch', 'class', 'clone', 'const', 'continue', 'declare', 'default', 'die', 'do', 'echo', 'else', 'elseif', 'empty', 'enddeclare', 'endfor', 'endforeach', 'endif', 'endswitch', 'endwhile', 'eval', 'exit', 'extends', 'final', 'for', 'foreach', 'function', 'global', 'goto', 'if', 'implements', 'include', 'include_once', 'instanceof', 'insteadof', 'interface', 'isset', 'list', 'namespace', 'new', 'or', 'print', 'private', 'protected', 'public', 'require', 'require_once', 'return', 'static', 'switch', 'throw', 'trait', 'try', 'unset', 'use', 'var', 'while', 'xor'
6. 继承(extends) 和实现(implement) 必须和 class name 写在一行,切花括号要换行写
<?php
namespace Lib\Databaes;
class Mysql extends ParentClass implements \PDO, \DB // 写一行
{
}
7. 成员属性访问修饰符必须显示声明不能省略
<?php
namespace Lib\Databaes;
class Mysql extends ParentClass implements \PDO, \DB // 写一行
{
public $foo = null;
private $name = 'sam';
protected $age = '17';
}
8. 成员方法访问修饰符必须显示声明不能省略
错误:
<?php
namespace Lib\Databases;
class MySQL
{
function fetchOne()
{
// ......
}
}
正确:
<?php
namespace Lib\Databases;
class MySQL
{
public function fetchOne()
{
// ......
}
}
9. 方法的参数有多个的时候,每个参数的逗号后面必须加个空格
namespace Lib\Databaes;
class Mysql extends ParentClass
{
public getInfo($name, $age, $gender = 1)
{
}
}
10. 当用到抽象(abstract)和终结(final)来做类声明时,它们必须放在可见性声明(public 还是protected还是private)的前面。而当用到静态(static)来做类声明时,则必须放在可见性声明的后面
<?php
namespace Vendor\Package;
abstract class ClassName
{
protected static $foo; // static 放后面
abstract protected function zim(); // abstract 放前面
final public static function bar() // final 放前面,static 放最后。
{
// 方法主体部分
}
}
11. 控制结构花括号、换行、空格等规范
if、else、elseif、switch、for、foreach、case、while、go、try、catch 等关键词后面必须加空格
if ($expr1) { // 左右空格
// if body
} elseif ($expr2) { // elesif 连着写
// elseif body
} else {
// else body;
}
switch ($expr) { // 左右空格
case 0:
echo 'First case, with a break'; // 对齐
break; // 换行写break,也对齐。
case 1:
echo 'Second case, which falls through';
// no break
case 2:
case 3:
case 4:
echo 'Third case, return instead of break';
return;
default:
echo 'Default case';
break;
}
while ($expr) { // 左右空格
// structure body
}
do {
// structure body; // 左右空格
} while ($expr);
for ($i = 0; $i < 10; $i++) { // 注意几个参数之间的空格
// for body
}
foreach ($iterable as $key => $value) { // 还是空格问题
// foreach body
}
try {
// try body
} catch (FirstExceptionType $e) { // 同样也是注意空格。
// catch body
} catch (OtherExceptionType $e) {
// catch body
}
12. 类名必须与文件名一样
13. 类的命名必须遵循 StudlyCaps 大写开头的驼峰命名规范
StudlyCaps 即单词首字母大写风格。有些人也称它为大驼峰。
14. 方法名称必须符合 camelCase 式的小写开头驼峰命名规范
camelCase 即第一个单词首字母小写后面的单词首字母大写的风格。
15. 类中的常量所有字母都必须大写,单词间用下划线分隔
CONST ORDER_STATUS = 1;
16. 变量必须使用小驼峰命名风格
$cardNo = ''; // 卡号。
$idCardNo = ''; // 身份证号。
17. 参数必须使用驼峰命名风格
18. 所有方法的起始花括号必须另起一行
<?php
class MySQL
{
public function fetchOne()
{
}
}
19. 直接在方法中写数组参数时格式如下
$object->callFunc([
'userId' => 1,
'username' => 'sam',
'age' => 20,
'sex' => 'male'
]);
20. 方法参数注释
/**
* 管理后台获取优惠券发送记录。
*
* @author 7031 2018-02-23
* @modify 7031 2019-02-25 修复了 SQL 性能问题。
*
* @param int $couponId 优惠券ID。
* @param string $username 用户名。
* @param string $mobilephone 用户手机号。
* @param int $page 当前分页页码。
* @param int $count 每页显示条数。
* @param array $data 请求参数。
*
* ------------------- eg:start ---------------------
* $data = [
* 'username' => '用户账号,没有时传空字符串',
* 'age' => '用户年龄,没有时传0',
* ];
* ------------------- eg:end -----------------------
*
* @return array
*/
public static function getBackendSendHistory($couponId = -1, $username, $mobilephone, $page, $count, $data) {
}
1)方法说明。
2)创建方法的同事编号以及时间。
3)修改方法的同事编号以及时间与修改的内容。
4)参数注释:类型、名称、参数说明。参数与其他注释之间要有空行。
5)参数示例:如果参数当中有复杂的参数。可以在参数下方给出示例以增强说明。
6)返回值。需要给出返回的类型。
21. 方法的代码行数不能超过一屏
每个人的显示器分辨率不一样。既然不超过一屏也会出现别的同事一屏会超出的情况。所以,即使未超过一屏,也尽量保证代码行在 40 行以内。如果发现自己的代码超过了 40 行,那么就需要考虑自己的代码是不是有拆分不合理的地方。特殊情况允许超过 40 行。但是,整个方法里面的代码必须是简单的判断逻辑。不包含复杂的业务判断逻辑。因为,不同的业务判断最佳实践是单独封装一个方法。