再次仔细的看了一下关于PHP代码的书写规范,我发现自己确实有很多不足的地方,需要改进,PHP代码遵循PSR(PHP Standard Recommendation)规范,之前忘了看哪本书看到psr4,psr4优化的是composer的依赖倒置,现在已经到psr18了,官网链接 php-fig() 。
代码如果写的很随意,就会显得自己不专业,也会给别人的阅读带来不便。
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还有个小细节是弱类型语法像强类型语法转变的风格,参数做了很大的限制。我个人猜想可能是限制了数据类型,考虑的是性能的提升PHP变量,底层少了一层类型转化。
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';
public function onHandShake(\Swoole\Http\Request $request, \Swoole\Http\Response $response) { if (!$this->customHandShake($request, $response)) { $response->end(); return false; }
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
原文链接:以上就是本篇分钟的全部内容,希望各位程序员们努力提升个人技术。最后,小编温馨提示:每天阅读5分钟,每天学习一点点,每天进步一点点。

点个赞
再走吧
(编辑:威海站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|