- PSR-1 是组织推荐的PHP开发规范
- PSR-2 是组织推荐的代码风格
- PSR-4 是组织推荐的类的自动加载规范
- PSR-5 是组织推荐的文档注释规范
规范有点多,不一定记得住,所以第一期整理的规则是一些大家已经形成或者正在形成的路上的开发规范。
规范的好处不用说了,提升团队协作的舒适度以及代码健壮性、安全性是毋庸置疑的。
PHP编程规约
命名规约
方法名采用首字母小写的驼峰方式,类名采用首字母大写的驼峰方式,方法名首词采用动词加驼峰// bad $a = 30; # 年龄 // good $age = 30; # 年龄
变量名都用驼峰// bad function calculate_salary() { // method body } // good function calculateSalary() { // method body } // bad class bizcode { // class body } // good class BizCode { // class body }
`建议`Api返回值中的字段名,是驼峰的命名方式 这个根据应用场景处理。// good $errorCode = 500; // bad $error_code = 500; // 类的成员变量 class Code { // good private $conf; // good protected $business; } class Code { // bad private $_conf; // bad protected $_business; }
-常量定义大写,单词间以下划线分隔
// bad define('app_path', __DIR__ . '/../application/'); // good define('APP_PATH', __DIR__ . '/../application/'); class BizCode { // bad const abc360 = 10; // good const LANDI = 20; }
- PHP关键字都小写, 常量 true 、false 和 null 也都小写
?> 结束符在文件末尾省略// bad FOREACH ($students AS $student) { } // good foreach ($students as $student) { } // bad IF ($age > 18) { // condition body } ELSE { // condition body } // good if ($age > 18) { // condition body } else { // condition body } // bad DEFINE('DEBUG', true); // good define('DEBUG', true);
创建数组时统一使用 [] 代替 array()// bad <?php echo 'Wow, non-blocking!'; ?> // good <?php echo 'Wow, non-blocking!';
if/for/foreach/while/switch/do 等保留字与括号之间都必须加空格。// bad $students = array(); // good $students = [];
在一个 switch 块内,都必须包含一个 default 语句并且 放在最后,即使空代码。// bad if($expr1){ // if body }elseif($expr2) { // elseif body }else{ // else body; } // good if ($expr1) { // if body } elseif ($expr2) { // elseif body } else { // else body; } // bad foreach($iterable as $key=>$value){ // foreach body } // good foreach ($iterable as $key => $value) { // foreach body }
所有的类都必须添加创建者和创建日期// bad switch ($expr) { case 0: echo 'First case, with a 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; } // good switch ($expr) { case 0: echo 'First case, with a 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; }
// bad <?php namespace lib\api; /** * ApiController基类 * Class ApiController * @package lib\api */ class ApiController { } // good <?php /** * User: xxx * Date: 2019/01/20 * Time: 下午1:13 */ namespace lib\api; /** * ApiController基类 * Class ApiController * @package lib\api */ class ApiController { }namespace声明后得有个空行,use 代码块放一起且上下保留空白行
extends implements 和类声明在一行// bad namespace Vendor\Package; use FooInterface; use BarClass as Bar; use OtherVendor\OtherPackage\BazClass; // class declaration // good namespace Vendor\Package; use FooInterface; use BarClass as Bar; use OtherVendor\OtherPackage\BazClass; // class declaration
类的起始大括号单独一行;类的结束大括号必须放在正文后面的下一行上// bad namespace Vendor\Package; use FooInterface; use BarClass as Bar; use OtherVendor\OtherPackage\BazClass; class Foo extends Bar implements FooInterface { } // good namespace Vendor\Package; use FooInterface; use BarClass as Bar; use OtherVendor\OtherPackage\BazClass; class Foo extends Bar implements FooInterface { } // 其他
方法参数在定义和传入时,多个参数逗号后边必须加空格, 函数参数默认值放最后, 方法参数给能够强制指定类型的指定类型// bad class Foo extends Bar implements FooInterface { // class body } // good class Foo extends Bar implements FooInterface { // class body }
abstract, final 放在类的可见性描述符前面,static放在描述符后面// bad function fooBarBaz($arg3 = [], &$arg2, $arg1) { // method body } // good function fooBarBaz($arg1, &$arg2, $arg3 = []) { // method body }
建议函数参数尽量不要超过4个, return 返回数据类型一致// bad abstract class ClassName { static protected $foo; protected abstract function zim(); static public final function bar() { // method body } } // good abstract class ClassName { protected static $foo; abstract protected function zim(); final public static function bar() { // method body } }
方法、类、成员变量、复杂逻辑要注释清楚,注释遵循phpDocument
// bad function foo($create_new) { if ($create_new) { return new stdClass(); } return null; } // good /** * @param bool $create_new When true returns a new stdClass. * * @return stdClass|null */ function foo($create_new) { if ($create_new) { return new stdClass(); } return null; }注释的双斜线与注释内容之间有且仅有一个空格
// bad //this is a doc // good // this is a doc
扫码二维码 获取免费视频学习资料
- 本文固定链接: http://phpxs.com/post/7373/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料
查 看2022高级编程视频教程免费获取