- 命名需要有意义,专有名词等特殊情况允许使用拼音
- 方法名采用首字母小写的驼峰方式,类名采用首字母大写的驼峰方式,方法名首词采用动词加驼峰
- 变量名都用首字母小写驼峰
- 常量定义大写,单词间以下划线分隔
//变量
$userName = 'xia';
//常量
const VERSION = '1.0';
const SITE_URL = 'http://www.baidu.com';
- PHP关键字都小写, 常量 true 、false 和 null 也都小写
- 使用tab键来缩进,每个tab键长度必须设置4个空格
- 每行最多120个字符;非空行不能有多余的空格;每行不能有多条语句
- 每个函数或方法不能多于60行
- 当数组有两个以上键值对时,请换行
- 数组的键必须为小写字母,多个单词间用下划线分隔
$where = [
'id' => 100,
'user_name' => 'php'
];
class ClassName
{
public function fooBarBaz($storeName, $storeId, array $info = [])
{
// method body
}
}
- 类文件名 类文件名必须和对应的类名一致,也是大驼峰式写法
- 普通函数使用小写字母+下划线命名,且函数名紧跟括号,中间不能有空格,参数之间要有空格,大括号换行
function curl_request($a, $b)
{
// method body
}
- 所有的类必须设定一个命令空间
- 命名空间(namespace)的声明后面必须有一行空行
- 所有的导入(use)声明必须放在命名空间(namespace)声明的下面
<?php
namespace core;
use common;
<?php
namespace core;
use common;
use library;
class Person
{
}
- if/for/foreach/while/switch/do 等关键字与括号之间都必须加空格
if ($expr1) {
// if body
} elseif ($expr2) {
// elseif body
} else {
// else body;
}
- 在一个 switch 块内,都必须包含一个 default 语句并且 放在最后,即使空代码
- extends implements 和类声明在一行
- 成员属性访问修饰符必须显示声明不能省略
<?php
namespace Lib\Databaes;
class Mysql
{
public $foo = null;
private $name = 'sam';
protected $age = '17';
}
<?php
namespace Lib\Databases;
class MySQL
{
public function fetchOne()
{
// ......
}
}
- 方法参数在定义和传入时,多个参数逗号后边必须加空格, 函数参数默认值放最后, 方法参数给能够强制指定类型的指定类型
function fooBarBaz($arg1, &$arg2, $arg3 = [])
{
// method body
}
function fooBarBaz(int $arg1)
{
// method body
}
- abstract, final 放在类的可见性描述符前面,static放在描述符后面
abstract class ClassName
{
protected static $foo;
abstract protected function zim();
final public static function bar()
{
// method body
}
}
- 建议函数参数尽量不要超过4个, return 返回数据类型一致
- 类、方法、行数,要以/* */格式注释,第二行开始写注释内容,表明作者、时间、参数格式、返回格式等,常用标签有:@autor、@since、@param 、@return等,如:
/**
* 我是类描述信息哦!
*
* @author Author
* @since 2020.01.02
* @version 1.0
*/
class ClassName
{
public function aVeryLongMethodName(
ClassTypeHint $arg1,
&$arg2,
array $arg3 = [])
{
// method body
}
}
/**
* 我是方法描述信息
*
* @author Author
* @since 2020.01.02
* @param ClassName $arg1 参数1描述 我是具体的对象类型哦
* @param array $arg2 参数2描述 我是数据类型哦
* @param int $arg3 参数3描述 我是基本数据类型哦
* @return boolean
*/
public function methodName(ClassName $arg1, array $arg2, $arg3)
{
// method body
return true;
}
// 这是注释
$object->callFunc([
'userId' => 1,
'username' => 'sam',
'age' => 20,
'sex' => 'male'
]);
namespace Lib\Databaes;
class Mysql
{
public getInfo ($name, $age, $gender = 1)
{
}
}
- 未使用的局部变量或use的类没有使用到,必须删除
- ifelse, foreach语句禁止嵌套超过3层,代码中应该减少直接的ifelse嵌套结构
- 所有要使用的变量必须先声明,禁止直接使用未声明的变量
- 单个文件禁止超过1500行,单个方法禁止超过80行,单个类禁止超过800行
- 第三方服务的接入代码和系统自身的业务代码必须切割开,不得混合在一起
- 所有的类必须通过composer实现自动加载,不得在代码中直接引入或使用其它方式引入
- MVC要明确各自的作用,业务逻辑最好加个service层,控制器只负责传数据