php代码优化以及开发中的小技巧

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

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

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

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

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

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

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

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

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

8、 关于代码兼容性。

在php 5.4下,可以正常使用可变变量,类似于:

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

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

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

php文档地址: http://www.php.net/manual/zh/language.variables.variable.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号那天的数据我们是查不到的。所以需要在接收的时候,
做一下转换:

$time_start = isset($this->db_g_data['time_start']) ? date("Y-m-d 00:00:00", strtotime($this->db_g_data['time_start'])) : "";
$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掉引用的部分 :https://segmentfault.com/a/1190000014126990

13、 关于php内存方面的优化也值得注意,循环能少则少,判断条件要在循环体之外:
参考:https://blog.csdn.net/LJFPHP/article/details/90053455

======================= 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博主「铁柱同学」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/LJFPHP/article/details/88712430

版权声明:
作者:王金阁
链接:https://www.nnbbxx.net/post-5959.html
来源:王金阁博客
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
< <上一篇
下一篇>>