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();elseresult = 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
PHP程序员需要注意的代码规范PSR有哪些?相关推荐
- laravel改代码没变化_菜鸡程序员是如何写代码的?
每个程序员都要历经从菜鸡到大牛过程蜕变胡过程.当初大家起点都差不多,工作多年后,有些人依然停留在菜鸡,有些人却已成为大牛,所有的事情,都是一点一滴习惯养成.让我们看看菜鸡程序员是如何写代码的?有可能找 ...
- java程序员可以只用windos吗_程序员要写多少代码 才能开发一个window操作系统
开发一个window操作系统需要程序员写多少行代码呢? 微软的Windows系统是伴随我们已久的老朋友了,大多数人都是一代一代Windows的用上来,老用户几乎都形成一个共识,就是微软的系统有一代会很 ...
- python表白代码如何运行-程序员如何实现表白代码
程序员实现表白代码的方法:首先打开代码编辑器:然后输入告白代码[while (life < end) {love++;},var you = function from_future_impor ...
- 程序猿之歌 PHP,1024丨腾讯第一首程序员之歌【Code代码】
原标题:1024丨腾讯第一首程序员之歌[Code代码] "发布总是在半夜 回滚是永远的愁". 内存泄漏.深夜发布.需求变更,这些熟悉的词语和场景,相信对于每个程序员朋友来说,都有着 ...
- 多少行数_经验丰富的程序员和其每日代码行数
John D. Cook是一位数学教授.程序员.顾问.经理人和统计学家,善于并享受结合运用这些技能来解决问题.他曾撰文说(中文): "最近,我听说了一个关于缺乏经验的程序员和经验丰富的程序员 ...
- 程序员在网吧写代码被暴打一顿!
近期在网上看到一个新闻,程序员在网吧写代码被人暴打一顿! 事情是这样子的,那位程序员家里电脑坏了,又有一个很急的项目要赶,就在小区楼下的网吧去写代码!由于时间很急,项目有很大,程序员的思路必须非常清晰 ...
- 看国外女神级程序员,直播写代码一年的感悟
我第一次直播写代码是在去年七月份.我想要直播一下我在业余时间内为开源项目领域所做的工作,尽管在youtube上的大部分直播都是关于游戏的.我比较擅长于NodeJS的硬件库方面的工作(尽管大部分项目都是 ...
- 支付宝程序员眼中的极致代码和卓越程序员是什么样的?
"双十一"前夕,支付宝BASIC College举办了一场名为"超级Ma力大赛"的活动.这是一场只用代码说话的竞赛,共有数千名支付宝的工程师参加,程序员和程序媛 ...
- 某程序员在网吧敲代码,出类拔萃,网友:为何我被打的却是我
相信现在很多年轻人的娱乐场所都是网吧,并且绝大多数的人去网吧都是为了打游戏,很少有去学习的,但是伟大的程序员就不一样了,做什么事都是出类拔萃,引人注目,这里就有一名程序员在网吧敲代码,从打游戏的这群人 ...
最新文章
- 使用apache的ab对想迪科技站点www.thinkdee.com进行压力测试
- 【java项目实践】具体解释Ajax工作原理以及实现异步验证username是否存在+源代码下载(java版)...
- You can't specify target table 'myusertable' for ......in FROM clause
- 对爬虫爬取到的数据进行存储
- 捋一捋js面向对象的继承问题
- Android开发和调试必备工具-SDK Tools
- AngularJS-demo - 常用命令、内置服务、自定义服务、继承
- LabVIEW自带函数实现SQL Server操作(下)
- ZooKeeper 集群为啥最好奇数台?
- 为什么本地图片都不能直接浏览器_抖音精选答疑解惑!你的视频为什么不能被下载?...
- python软件测试面试题及答案_软件测试面试 | 一道大厂算法面试真题,你能答上来吗?(附答案)...
- PAT甲级1007 最大连续子序列
- 给笔记本更换SSD硬盘
- WireShark帧格式解析
- Spring Data Jpa 查询返回自定义对象
- 如何高效的自学编程(新手篇)
- linux vi波浪符号的作用,vi使用方法
- Thinkpad预装win10硬盘分区
- julia的Unicode 字符输入
- php 中文拼音模糊查询,PHP-输入字母 模糊查询汉字