[精选]PHP程序员需要注意的代码规范PSR有哪些?

前言

再次仔细的看了一下关于 PHP 代码的书写规范,我发现自己确实有很多不足的地方,需要改进,PHP 代码遵循 PSR(PHP Standard Recommendation)规范,之前忘了看哪本书看到 psr4,psr4 优化的是 composer 的依赖倒置,现在已经到 psr18 了,官网链接 php-fig(https://www.php-fig.org/psr/)

代码如果写的很随意,就会显得自己不专业,也会给别人的阅读带来不便。

1、变量、函数写法驼峰

我之前的代码里就是变量有下划线、有驼峰非常不标准

public function readMessage()
{
    $fdServer = new FdServer();
    $countServer = new CountServer();

    $toUid = $this->request->getToUid($this->body['to_uid']);
    $syncStamp = $this->request->getSyncStamp($this->body['syncstamp']);
    ##略
}

2、如果只是当前类使用,不涉及外面的类调用,控制权限给 private,方法名用下划线,如果返回数据,返回数据类型最好也保持统一。

private function _formatData($data)
{
     if(!$data) return [];

     foreach ($data as $val){
         //...略
     }

     return $data;
}

3、if 条件和嵌套

个人习惯如果是 if 最好是加上 {}, 也有人习惯不加,没有权威手册说加好还是不加好。

function getPayAmount() {
  let result;
  if (isDead)
    result = deadAmount();
  else {
    if (isSeparated)
      result = separatedAmount();
    else {
      if (isRetired)
        result = retiredAmount();
      else
        result = normalPayAmount();
    }
  }
  return result;
}

优化后,是不是清爽了太多?

function getPayAmount() {
  if (isDead) return deadAmount();
  if (isSeparated) return separatedAmount();
  if (isRetired) return retiredAmount();
  return normalPayAmount();
}

4、重复 2 次的地方,要写一个函数处理

写函数处理代码的好处是修改时可以统一修改,方便调用,而且在性能上也更优,PHP 的底层调用函数结束后,释放资源,如果不分离代码,需等待全部程序执行完毕在统一释放。

5、ORM 层数据库的链式调用,ORM 主要是采用面向对象的思想对数据库进行操作。


Model::create()->where('status', 1)->where(' (id > 10 or id <2) ')->get();

底下的链式对 Sql 执行进行了预处理,防止 Sql 注入


public function getNovelApplyCount(int $nid)
{
    $sql = "SELECT COUNT(*) number FROM {$this->table}
            WHERE `novel_id` = :novel_id";
    $data = [
        ':novel_id' => $nid,
    ];

    $tag = $this->getNovelTag($nid);
    $res = $this->dao->conn(false)->setTag($tag)->preparedSql($sql, $data)->fetchOne();
    return $res['number'] ?? 0;
}

6、PHP5 到 PHP7 的变化

虽说现在已经 8.0 了,但还是很有必要看一下的。PHP5 最重要的特性就是丰富了面向对象的设计和语法,PHP7 最大的特性就是提升了性能,PHP7 还有个小细节是弱类型语法像强类型语法转变的风格,参数做了很大的限制。我个人猜想可能是限制了数据类型,考虑的是性能的提升,底层少了一层类型转化。

protected function onRequest(?string $action): ?bool
{
    //接收参数
    $this->params = $this->request()->getRequestParam();
    $this->method = $this->request()->getMethod();
    return true;
}

private static function _formatQueryData(string $loginKey): string
{
    $data['timestamp'] = time();
    $data['loginKey'] = $loginKey;
    $token = self::setToken($data);
    $data['token'] = $token;
    $params = http_build_query($data);
    return $params;
}

7、代码列最好不要超过 120, 单个函数不要超过 100 行 (psr2 原文)

There MUST NOT be a hard limit on line length.

The soft limit on line length MUST be 120 characters; automated style checkers MUST warn but MUST NOT error at the soft limit.

Lines SHOULD NOT be longer than 80 characters; lines longer than that SHOULD be split into multiple subsequent lines of no more than 80 characters each.

There MUST NOT be trailing whitespace at the end of non-blank lines.

Blank lines MAY be added to improve readability and to indicate related blocks of code.

There MUST NOT be more than one statement per line.

8、psr14 的主题是 Event Dispatcher,大概就是把定义的对象写在调用函数里。


class WebSocketEvent
{
    const MYSQL_CONN_NAME = 'mysql-msg';
    /**
     * @param \Swoole\Http\Request $request
     * @param \Swoole\Http\Response $response
     * @return bool
     */
    public function onHandShake(\Swoole\Http\Request $request, \Swoole\Http\Response $response)
{
        /** 此处自定义握手规则 返回 false 时中止握手 */
        if (!$this->customHandShake($request, $response)) {
            $response->end();
            return false;
        }

        /** 此处是  RFC规范中的WebSocket握手验证过程 必须执行 否则无法正确握手 */
        if ($this->secWebsocketAccept($request, $response)) {
            $response->end();
            return true;
        }

        $response->end();
        return false;
    }
}

9、代码分层

就像 Tcp/Ip 协议一样,复杂的处理过程就是进行人为的逻辑分层,PHP 的分层有之前的 MVC 和现在流行的 DDD 模式,有人说 MVC 是滴血模式。我个人觉得 MVC 也是很好用的,不能网上流行什么我们就用什么,主流的一般都是大公司的处理方式和模式,可是互联网一共有多少大公司呢,开发者要有自己的思维方式,用什么看具体的业务需要。

10、PhpStrom 的设置

命名规范还有个小窍门,如果是命名不规范,PHPstrom 会提示绿色波浪线,注释不规范就会提示黄色波浪线,下面是不规则的 Demo。

编辑

Mac 格式化代码:shift+alt+command+l
本文转载自:blog.csdn.net/qq_41451303/article/...

php
本作品采用《CC 协议》,转载必须注明作者和本文链接
最美的不是下雨天,而是和你一起躲过的屋檐!
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。