文档开发者中心
我的

php代码优化以及开发中的小技巧(持续补充)(转载)


一、前言

这篇文章是博主平时记的小笔记,记录的是平时开发没有注意到的细节,或者在写代码的时候可以优化的部分。有相当一部分bug都是开发中不够严谨造成的,所以大家共勉。提升代码质量,快乐撸码!

二、正文

1、 代码的公用部分尽量不要改动,除非是所有的项目都需要添加某些新功能

2、 对于自定义的数组,对象等不同文件,要按照已有的文件分开。不要把对象定义到数组文件,数组定义到对象文件,方便调试和代码优化

3、 对于一些不必要的操作,无需发请求。比如我们的拖动排序事件。应该确保当顺序改变的时候再发送http请求。仅仅是拖动但没有改变位置的,不需要发送请求。这样在用户访问量比较多的情况下,不会有太大的访问压力

4、 构造函数要用起来。通用的变量,或者需要实例化的数据库部分都可以放里面。这样在脚本的其他地方使用很方便

5、 控制器中的方法名命名要更贴近实际功能,方便查看维护。

6、 不要为了方便,有些表单只在前端验证,而不去后端验证。因为用户可以通过禁用JS等方法,跳过你的前端验证,那么这个时候我们就无法保证系统的安全性,所以后端验证必不能少。在用户体验不是很重要的项目,系统的安全性更加重要。
举例: 用户修改密码,验证旧密码部分,如果只是前端通过JS验证,提交后的代码不加验证的话,用户可能会避过JS,从而直接修改密码,保证不了安全性

7、 比如我们在开发的时候,需要用到变量a。

1 if(xx){ a=1; }else{a=2};
2 $b = a + 1;

类似于这种的,变量a没有预先定义,所以会成为notice错误。如果此时我们的服务器的错误级别是notice都会报错的话,那么这部分就会成为bug。此时此刻再说“在我本地没问题啊”这种话将毫无意义,所以最好是在写程序的时候,就对自己严谨一些。

8、 关于代码兼容性。
在php 5.4下,可以正常使用可变变量,类似于:

1 $a = 'php';
2 $$a = '我是PHP';
3 echo $php;// 输出:我是PHP

这段代码在php5.4下是可以的,但是在php 7.0下会报错:Array to string conversion 。

1 这是因为php 5.4把($$a)中的$a当做一个整体,先解析$a = php ,然后通过第一个`$`符号,转化为( $$a == $php = 我是PHP )。但是在 php7.0,代码的严格性得到提升,此处必须使用 ${$a} 来区分解析的优先级,加个花括号标出来后面的变量,类似于咱们小学时候的加减乘除的优先级问题。

php文档地址:

9、关于SVN或者git提交

代码在提交的时候,如果涉及到代码的重构,修复bug,优化等功能,那么最好是分多次提交。比如代码重构单独提交一次,修复Bug或者优化都单独提交一次。不要害怕提交的次数太多之类的,我们分的越细,等到出问题的时候,不管是直接定位问题所在还是回滚版本都会好操作很多。这也算是开发技巧之一吧。

======================= 2019年5月10日13时更新 ==============================

10、 在开发的时候,每用到一个变量,就要考虑到万一不存在这个变量,或者变量为空的时候,会不会影响到程序的正常运行?要在开发的时候就做好严谨的逻辑思考,加个条件判断并不会对程序的运行速度造成太大影响,但是不加这个条件判断,可能会造成程序崩溃。

11、 根据传过来的时间条件查询数据比实际数据少一天的情况?

首先,我本地的时间字段是datetime,那么2019/03/25会自动转化为2019/03/25 00:00:00,所以才出现查询数据少一天的情况。如果本地的时间字段类型是date,那么查询的时候,可以不用再拼接23:59:59也能正确得出结束时间当天的数据。
拼接的方案:
当本地日期字段类型是datetime,使用between and查询时间区间的时候,需要记得,如果传过来的日期是:2019/03/25 -- 2019/03/27这种的,那么直接转化为时间戳的话,结束时间是2019/03/26 23:59:59 ,相当于27号那天的数据我们是查不到的。所以需要在接收的时候,
做一下转换:

1 $time_start = isset($this->db_g_data['time_start']) ? date('Y-m-d 00:00:00', strtotime($this->db_g_data['time_start'])) : '';
2 $time_end = isset($this->db_g_data['time_end']) ? date('Y-m-d 23:59:59', strtotime($this->db_g_data['time_end'])) : '';

这样相当于重新把日期转化为格式化的时间,同时给起始时间一个00:00:00 ,给结束时间一个:23:59:59 。

12、 使用传引用后,记得unset掉引用的部分 :

13、 关于php内存方面的优化也值得注意,循环能少则少,判断条件要在循环体之外:
参考:

======================= 2019年6月2日20时更新 ==============================
1、 对于php程序,有些if{}else{}是可以缩减的,if{}else{}多了也代表着代码的冗余,要谨记

2、 比如要查询当前时间往后,1天,5天,10天的数据。如果你每次都循环查询,0-1,0-5,0-10,那么查询是有冗余的,而且查询速度会越来越慢。这个时候应该选用:0-1,2-5,6-10这个时间区间来查询,这样会节省不少时间。

3、 intval还是少用,如果在单纯的计算中,比如:12.22 / 1.1 这种,用intval就会计算不准确,特别是在循环中,数据会越来越不准确。在计算的时候,要么采用精度计算,要么采用sprintf来格式化

4、 在写代码的时候,要考虑一个问题,假如有100W的数据,你的代码能跑的动吗?优化在于开始写之前,而不是开始写之后。

5、 对文件命名的时候,不要带上项目的名字,因为多个项目的话,可能会共用同一个文件。

6、 代码精简,一些判断条件,要注意是否重复。比如你在sql里面限制 x字段为1,那么下面的逻辑中就没必要判断 if(x ==1)这种情况,因为我们用的结果集是从数据库中拿的,已经筛选过了。
---------------------
作者:铁柱同学
来源:CSDN
原文:
版权声明:本文为博主原创文章,转载请附上博文链接!

点赞
收藏
回复
分享
举报
浏览882 发布于2019-07-22 03:56未知归属地
全部评论
最多点赞
最新发布
最早发布
暂无评论
暂无评论
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要发帖子

了解社区公约,与您携手共创和谐专业的开发者社区。