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

更新日期: 2022-08-25 阅读: 1.3k 标签: 规范

再次仔细的看了一下关于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

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/12049

相关推荐

什么是驼峰命名?骆驼式命名法规范

骆驼式命名法(Camel-Case)又称驼峰式命名法,是电脑程式编写时的一套命名规则(惯例)。正如它的名称CamelCase所表示的那样,是指混合使用大小写字母来构成变量和函数的名字

web开发,前后分离接口规范

目前我们现在用的前后端分离模式属于第一阶段,下一阶段可以在前端工程化方面,对技术框架的选择、前端模块化重用方面,可多做考量。也就是要迎来“==前端为主的 MV* 时代==”。

CSS规范

CSS 指层叠样式表 (Cascading Style Sheets),定义如何显示 HTML 元素,但由于 CSS 天生全局性,随着项目复杂度增加,极易出现样式覆盖以及其它的问题。

前端变量命名规范

程序开发过程中变量命名不仅是一个头疼问题,也是一个对开发者综合素质的检验,它会直接影响到代码的最终交付质量、代码Review人员心智承受力。如何写出具有创造性、优雅性、易读性的高质量代码,需要开发者在实际工作中不断总结、提炼

js中箭头函数的编码规范,如何更好的使用箭头函数

当您必须使用匿名函数,请使用箭头函数表示法,它创建了一个在 this 上下文中执行的函数的版本,这通常是你想要的,而且这样的写法更为简洁。如果你有一个相当复杂的函数,你或许可以把逻辑部分转移到一个声明函数上。

Web前端开发规范手册

文件命名规则:文件名称统一用小写的英文字母、数字和下划线的组合。引文件统一使用index.htm index.html index.asp文件名(小写),图片的名称分为头尾两部分,用下划线隔开,头部分表示此图片的大类性质

W3C标准及规范

W3C的意思是万维网联盟(World Wide Web Consortium),创建于1994年10月,是一个会员组织,它的工作是对web进行标准化--->W3C 致力于实现所有的用户都能够对 web 加以利用

web前端js中ES6的规范写法

引号的使用,单引号优先(如果不是引号嵌套,不要使用双引号)、空格的使用问题:(关键字后 符号后 排版 函数 赋值符号= )等、不写没有使用过的变量,如果定义了一个变量,后来一直没有参与过运算,那么不应该定义这个变量...

JavaScript 命名约定最佳实践

在开发过程中,遵循标准的命名约定可以提高代码的可读性。下面就来看看 JavaScript 中命名约定的最佳实践。JavaScript 变量名称是区分大小写的,大写和小写字母是不同的。

用standard来管理JavaScript 代码规范

standard是一个开源的JS代码规范库,制定了所谓standard(标准)的JS代码规范,配合编辑器插件可以实时检查代码规范以及语法错误,通过执行命令检查代码规范以及语法错误,自动修复(可以直接修复的)不合规范的代码,使其符合规范

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!