php code fix
This commit is contained in:
parent
07ae4a067a
commit
1b59cab0e1
325
_posts/编程/PHP/standard.md
Normal file
325
_posts/编程/PHP/standard.md
Normal file
@ -0,0 +1,325 @@
|
||||
---
|
||||
title: PHP代码统一规范规则细节
|
||||
date: 2023-06-09
|
||||
tags: PHP
|
||||
---
|
||||
# 规则Rule
|
||||
|
||||
## PHPDoc
|
||||
|
||||
1. 变量以及属性的辅助注解.方便IDE跳转和追踪
|
||||
|
||||
```php
|
||||
<?php
|
||||
/** @var int $foo */
|
||||
$foo = 2 + 2;
|
||||
|
||||
|
||||
final class Foo
|
||||
{
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
public $bar;
|
||||
|
||||
/**
|
||||
* @type float
|
||||
*/
|
||||
public $baz;
|
||||
}
|
||||
```
|
||||
|
||||
2. 变量以及属性多态类型优先级
|
||||
|
||||
```php
|
||||
# 修正前:
|
||||
|
||||
/**
|
||||
* @param null|string|int|\Foo $bar
|
||||
*/
|
||||
# 修正后:
|
||||
/**
|
||||
* @param \Foo|int|null|string $bar
|
||||
*/
|
||||
```
|
||||
|
||||
3. 注释对齐(居中非依左或不对齐)
|
||||
|
||||
```php
|
||||
/**
|
||||
|
||||
# 修改前
|
||||
* @param EngineInterface $templating
|
||||
* @param string $format
|
||||
* @param int $code an HTTP response status code
|
||||
* @param bool $debug
|
||||
* @param mixed &$reference a parameter passed by reference
|
||||
|
||||
|
||||
# 修改后
|
||||
* @param EngineInterface $templating
|
||||
* @param string $format
|
||||
* @param int $code an HTTP response status code
|
||||
* @param bool $debug
|
||||
* @param mixed &$reference a parameter passed by reference
|
||||
|
||||
```
|
||||
|
||||
4. 未确定类型使用`mixed`声明,默认值带为null需要用`?`修饰符
|
||||
|
||||
```php
|
||||
/**
|
||||
* @param string|null $foo
|
||||
* @param int $bar
|
||||
* @param mixed $baz
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function foo(?string = null $foo, int $bar, $baz) {}
|
||||
|
||||
```
|
||||
|
||||
5. 数组key以及类属性对齐
|
||||
|
||||
```php
|
||||
# 修改前
|
||||
class Foo
|
||||
{
|
||||
public $a = 0;
|
||||
|
||||
public $b = 0;
|
||||
public $c = 0;
|
||||
|
||||
public$d = 0;
|
||||
}
|
||||
# 修改后
|
||||
class Foo
|
||||
{
|
||||
public $a = 0;
|
||||
|
||||
public $b = 0;
|
||||
|
||||
public $c = 0;
|
||||
|
||||
public $d = 0;
|
||||
}
|
||||
# 修改前
|
||||
$arr = [
|
||||
'a'=>'tom',
|
||||
'c' => 'sevne',
|
||||
'd'=> 'mazda',
|
||||
'b' =>'cross m78 unm',
|
||||
]
|
||||
# 修改后
|
||||
$arr = [
|
||||
'a' => 'tom',
|
||||
'c' => 'sevne',
|
||||
'd' => 'mazda',
|
||||
'b' => 'cross m78 unm',
|
||||
]
|
||||
|
||||
```
|
||||
|
||||
## 代码约束
|
||||
|
||||
1. declare_strict 严格声明
|
||||
主要解决程序在处理类型时候避免隐性转换
|
||||
|
||||
```php
|
||||
declare(strict_types=1);
|
||||
//code ....
|
||||
|
||||
```
|
||||
|
||||
2. 使用常量`PHP_EOL`替代 `"\n"` 换行符号
|
||||
|
||||
```php
|
||||
|
||||
echo "some thing \n";
|
||||
echo "some thing PHP_EOL";
|
||||
|
||||
```
|
||||
|
||||
3. 声明函数必须使用`function_exists`包裹判断,避免函数重复声明
|
||||
|
||||
```php
|
||||
if (!function_exists('dd')) {
|
||||
/**
|
||||
* dd 调试
|
||||
*
|
||||
* @param ...$vars
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function dd(...$vars)
|
||||
{
|
||||
foreach ($vars as $v) {
|
||||
VarDumper::dump($v);
|
||||
}
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
1. 函数或类的方法没有返回类型需要声明`void`类型
|
||||
|
||||
```php
|
||||
function foo(string $a): void {}
|
||||
|
||||
|
||||
class Foo
|
||||
{
|
||||
public function handle(): void;
|
||||
{
|
||||
//code ...
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
5. 命名空间导入,导入或完全限定全局类/函数/常量
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
# 修改前
|
||||
$d = new \DateTimeImmutable();
|
||||
# 修改后
|
||||
$d = new DateTimeImmutable();
|
||||
|
||||
```
|
||||
|
||||
6. 使用`::class`替换完整类名使用,以及替代`get_class`函数
|
||||
|
||||
```php
|
||||
# 修改前
|
||||
$className = 'Foo\Bar\Baz';
|
||||
# 修改后
|
||||
$className = Baz::class;
|
||||
```
|
||||
|
||||
7. 多次调用转换成单次调用
|
||||
|
||||
```php
|
||||
# 修改前
|
||||
$a = isset($a) && isset($b);
|
||||
# 修改后
|
||||
$a = isset($a, $b) ;
|
||||
|
||||
# 修改前
|
||||
unset($a);
|
||||
unset($b);
|
||||
# 修改后
|
||||
unset($a, $b);
|
||||
```
|
||||
|
||||
8. 使用语法糖简化调用
|
||||
|
||||
```php
|
||||
# 修改前
|
||||
$boo = isset($foo) ? $foo : null;
|
||||
# 修改后
|
||||
$boo = $foo ?? null;
|
||||
//或
|
||||
$foo ??= null;
|
||||
|
||||
# 修改前
|
||||
$boo = $foo ? $foo : '';
|
||||
# 修改后
|
||||
$boo = $foo ?:'';
|
||||
|
||||
|
||||
# 修改前
|
||||
list($a, $b) = $foos;
|
||||
# 修改后
|
||||
[$a, $b] = $foos;
|
||||
```
|
||||
|
||||
9. 变量占位符由`${` 转换`{$)` php的高版本已经抛弃`${`用法
|
||||
|
||||
```php
|
||||
$name = 'World';
|
||||
# 修改前
|
||||
echo "Hello ${name}!";
|
||||
# 修改后
|
||||
echo "Hello {$name}!";
|
||||
```
|
||||
|
||||
10. PHP常量true、false和null须使用小写
|
||||
|
||||
```php
|
||||
# 修改前
|
||||
$a = FALSE;
|
||||
$b = True;
|
||||
$c = NULL;
|
||||
# 修改后
|
||||
$a = false;
|
||||
$b = true;
|
||||
$c = null;
|
||||
```
|
||||
|
||||
11. 使用动态属性或方法,属性需要实现`__get`和`__set`,方法需要`_call()`或`__callStatic`以及在class 头部声明,便于ide识别以及查阅
|
||||
|
||||
```php
|
||||
/**
|
||||
* Class Foo
|
||||
*
|
||||
* @property string $attr
|
||||
* @method Foo handleA(string $arg)
|
||||
*/
|
||||
class Foo
|
||||
{
|
||||
public function __set($name, $value)
|
||||
{
|
||||
//code
|
||||
}
|
||||
|
||||
|
||||
public function __get($name)
|
||||
{
|
||||
//code
|
||||
}
|
||||
|
||||
|
||||
public function __call($method, $args)
|
||||
{
|
||||
//code
|
||||
}
|
||||
|
||||
public static function __callStatic($method, $args)
|
||||
{
|
||||
//code
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 耦合优化
|
||||
|
||||
1. 使用依赖对象处理多参数方法或函数,避免后面迭代出现超级函数
|
||||
|
||||
```php
|
||||
# 修改前
|
||||
function foo(string $argv, int $argc, array $arg, \Closure $argz) :void
|
||||
{
|
||||
//code
|
||||
}
|
||||
# 修改后
|
||||
|
||||
Class Boo
|
||||
{
|
||||
public string $argv;
|
||||
|
||||
public string $argc;
|
||||
|
||||
public string $argg;
|
||||
|
||||
public function argz() : Closure
|
||||
{
|
||||
return function (){ };
|
||||
}
|
||||
}
|
||||
|
||||
function foo(Boo $boo) :void
|
||||
{
|
||||
//code
|
||||
}
|
||||
```
|
Loading…
x
Reference in New Issue
Block a user