博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP理想国--代码怎么写看的更舒服
阅读量:6646 次
发布时间:2019-06-25

本文共 1901 字,大约阅读时间需要 6 分钟。

写在前面:

代码的易读性,个人认为是非常重要,受团队重视但是不能始终贯彻的.虽然面向对象已经成为了不二主流,在PHP的大世界里,在本人遇到的各种PHPer中,面向过程的写法仍比比皆是.维护成本也各不相同.
下面是本人在工作中的一些总结和想法,如有看的不舒服的,换个舒服的姿势.

命名

命名规范是编码的基本,下划线和驼峰只是形式,实质还是要看想要这个名字做什么.

1.确定使用动词性质还是名词性质

2.尽量将其具体化
3.勤于修改

eg1. userName VS userAttribute

eg2. setName VS manageName
eg3. 王建国 VS 王建设
eg4. getUserName VS getUserNameByUid

注释

无效注释一定要删除!害人害己.
逻辑注释一定要详细!
代码修改后,注释一定要改!
没有注释,别人还能一眼看明白,是真的厉害!

代码生命周期

1.局部变量声明和使用尽量靠近,不要跨过山河大海,穿过人山人海
$userLogObjectId = "string";$userLogForCache = array(...);$userLogForStorage = array(...);if(!createUserLogForCache($userLogObjectId, $userLogForCache)) return false;if(!createUserLogForStorage($userLogObjectId, $userLogForStorage)) return false;复制代码
vs复制代码
$userLogObjectId = "string";$userLogForCache = array(...);if(!createUserLogForCache($userLogObjectId, $userLogForCache)) return false;$userLogForStorage = array(...);if(!createUserLogForStorage($userLogObjectId, $userLogForStorage)) return false;复制代码

2.方法调用尽量紧跟其后

public function setInputRules(){...}public function getInputValues(){...}public function main(){    $this->setInputRules();    $this->getInputValues();}复制代码
vs复制代码
public function main(){    $this->setInputRules();    $this->getInputValues();}private function setInputRules(){...}private function getInputValues(){...}复制代码

3.成员变量谨慎使用:欲说还休

4.常量谨慎使用:const vs define

访问权限

权限是基础的,但是真正做到权限管理的很少,基本上都是一溜的public.
虽然代码一样跑的畅通无阻,管理一下,起码看起来更安全和更专(装)业(X)一些.
关键是其他人调用的时候不会感到一脸懵逼,也不会滥调用.看到自己精心写出来的代码被随意滥用,很不爽的啊!
而且对于编写的类结构也更清晰,什么是开放的,什么是私有的,什么是继承的.

类间关系

1.面向接口编程,而不是面向实现编程
2.组合优于继承
3.依赖注入
4.依赖反转
5.等等...
对自己编写的代码不断进行优化重构,总会发现新的想法和技巧

设计模式

很少有东西是可以不懂就拿来使用的.
设计模式是一个启示性工具,在代码解耦性和扩展性方面很强大.
选用合适的模式,结合自身需求,进行整合和修改,不断优化重构,才能达到理想的效果.

测试

曾经看过一句话:没有测试的代码,就好像在钢丝绳上跳舞.高空,没有安全带的那种.随时可能被摔死,而且死的很惨.
虽然TDD提出好久了,各流行框架也加入了PHPUnit,但是现实是骨感的.
只想说:测试非常非常重要!能写出好的测试非常非常重要!能加就加!能早加就早加!

写在后面:

看的舒服,其实就是对代码不断优化重构的表现.是对代码精益求精的体现.
还没有见过一次性写完代码不进行修改的大牛.期待!
业精于勤,希望自身也能通过自己的总结,激励自己,成为一个勤奋的人!

转载地址:http://kagvo.baihongyu.com/

你可能感兴趣的文章
社区投稿 | DBLE rule.xml 配置解析
查看>>
mysqll索引实验
查看>>
面试题·HashMap和Hashtable的区别(转载再整理)
查看>>
算法入门
查看>>
【React深入】setState的执行机制
查看>>
微信域名防封接口的应用场景
查看>>
116. Populating Next Right Pointers in Each Node
查看>>
使用Envoy 作Sidecar Proxy的微服务模式-2.超时和重试
查看>>
每日两道前端面试题20190220
查看>>
自底向上的web数据操作指南
查看>>
在使用spring-boot-maven-plugin的下生成普通的jar包
查看>>
Vue-SuperSlide(SuperSlide component for Vue)
查看>>
应用监控的选型思考
查看>>
MaxCompute表设计最佳实践
查看>>
https简单解读
查看>>
Redux and Router
查看>>
什么是压测,为什么要进行压力测试?JMETER工具的使用
查看>>
关于epoll的IO模型是同步异步的一次纠结过程
查看>>
混合云管理-企业如何选择混合云管理平台
查看>>
JavaEE 压力测试工具
查看>>