前言

再次仔细的看了一下关于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有哪些?相关推荐

  1. laravel改代码没变化_菜鸡程序员是如何写代码的?

    每个程序员都要历经从菜鸡到大牛过程蜕变胡过程.当初大家起点都差不多,工作多年后,有些人依然停留在菜鸡,有些人却已成为大牛,所有的事情,都是一点一滴习惯养成.让我们看看菜鸡程序员是如何写代码的?有可能找 ...

  2. java程序员可以只用windos吗_程序员要写多少代码 才能开发一个window操作系统

    开发一个window操作系统需要程序员写多少行代码呢? 微软的Windows系统是伴随我们已久的老朋友了,大多数人都是一代一代Windows的用上来,老用户几乎都形成一个共识,就是微软的系统有一代会很 ...

  3. python表白代码如何运行-程序员如何实现表白代码

    程序员实现表白代码的方法:首先打开代码编辑器:然后输入告白代码[while (life < end) {love++;},var you = function from_future_impor ...

  4. 程序猿之歌 PHP,1024丨腾讯第一首程序员之歌【Code代码】

    原标题:1024丨腾讯第一首程序员之歌[Code代码] "发布总是在半夜 回滚是永远的愁". 内存泄漏.深夜发布.需求变更,这些熟悉的词语和场景,相信对于每个程序员朋友来说,都有着 ...

  5. 多少行数_经验丰富的程序员和其每日代码行数

    John D. Cook是一位数学教授.程序员.顾问.经理人和统计学家,善于并享受结合运用这些技能来解决问题.他曾撰文说(中文): "最近,我听说了一个关于缺乏经验的程序员和经验丰富的程序员 ...

  6. 程序员在网吧写代码被暴打一顿!

    近期在网上看到一个新闻,程序员在网吧写代码被人暴打一顿! 事情是这样子的,那位程序员家里电脑坏了,又有一个很急的项目要赶,就在小区楼下的网吧去写代码!由于时间很急,项目有很大,程序员的思路必须非常清晰 ...

  7. 看国外女神级程序员,直播写代码一年的感悟

    我第一次直播写代码是在去年七月份.我想要直播一下我在业余时间内为开源项目领域所做的工作,尽管在youtube上的大部分直播都是关于游戏的.我比较擅长于NodeJS的硬件库方面的工作(尽管大部分项目都是 ...

  8. 支付宝程序员眼中的极致代码和卓越程序员是什么样的?

    "双十一"前夕,支付宝BASIC College举办了一场名为"超级Ma力大赛"的活动.这是一场只用代码说话的竞赛,共有数千名支付宝的工程师参加,程序员和程序媛 ...

  9. 某程序员在网吧敲代码,出类拔萃,网友:为何我被打的却是我

    相信现在很多年轻人的娱乐场所都是网吧,并且绝大多数的人去网吧都是为了打游戏,很少有去学习的,但是伟大的程序员就不一样了,做什么事都是出类拔萃,引人注目,这里就有一名程序员在网吧敲代码,从打游戏的这群人 ...

最新文章

  1. 使用apache的ab对想迪科技站点www.thinkdee.com进行压力测试
  2. 【java项目实践】具体解释Ajax工作原理以及实现异步验证username是否存在+源代码下载(java版)...
  3. You can't specify target table 'myusertable' for ......in FROM clause
  4. 对爬虫爬取到的数据进行存储
  5. 捋一捋js面向对象的继承问题
  6. Android开发和调试必备工具-SDK Tools
  7. AngularJS-demo - 常用命令、内置服务、自定义服务、继承
  8. LabVIEW自带函数实现SQL Server操作(下)
  9. ZooKeeper 集群为啥最好奇数台?
  10. 为什么本地图片都不能直接浏览器_抖音精选答疑解惑!你的视频为什么不能被下载?...
  11. python软件测试面试题及答案_软件测试面试 | 一道大厂算法面试真题,你能答上来吗?(附答案)...
  12. PAT甲级1007 最大连续子序列
  13. 给笔记本更换SSD硬盘
  14. WireShark帧格式解析
  15. Spring Data Jpa 查询返回自定义对象
  16. 如何高效的自学编程(新手篇)
  17. linux vi波浪符号的作用,vi使用方法
  18. Thinkpad预装win10硬盘分区
  19. julia的Unicode 字符输入
  20. php 中文拼音模糊查询,PHP-输入字母 模糊查询汉字

热门文章

  1. 58同城字体加密解密方法
  2. 【Unity开发总结】C# 闭包陷阱
  3. 脂肪体重器、手环、NFC手机
  4. 远程FPGA虚拟实验平台用SystemVerilog HDL实现硬布线控制器
  5. 站内通知 java组件,spring-aop组件详解——Advice通知
  6. 干货 | PID算法在广告成本控制领域的应用
  7. 使用MATLAB Compiler
  8. 火狐 代理服务器拒绝连接
  9. 【读论文】基于三支决策的不平衡数据过采样方法
  10. C++必知必会RALL与Pimpl