php的一些编写代码的好习惯

php作为世界上最好的语言,入门简单,编写代码容易,很容易让新手实现自己想要的功能,却因为入门简单,导致新手没有养成一个写代码的好习惯,导致后期编写的代码性能,代码可读性越来越差,下面就分享一下我这2年个人认为好的代码习惯吧

一:尽量使用php内置函数

php在默认安装情况下,有1000多个可以使用的函数,包括的各式各样的操作功能,比如判断字符串是否存在某个字符串strpos(),

数组排序sort()等等函数,由于这些都是php的扩展(C语言),在底层中完成的,所以在运行中不需要被zend引擎重新解释,速度更快,

所以,多使用内置函数,能让php的运行速度更快一些


二:尽量不使用php错误抑制符

php中,@符号是用于在单个语句中预制报错的,例如@$a[a]=1;它的执行过程是:

1:把error_reporting参数改为0(屏蔽所有错误)

2:执行$a[a]=1;

3:把error_reporting参数改为默认

相当于,只要使用了一次@错误符号,会调用2次修改错误参数,这大大的降低了性能,而且会造成代码的不可读,变的更难调试

测试情况如下:

<?php
var_dump(error_reporting());
var_dump(@error_reporting());
var_dump(error_reporting());

结果:

仙士可博客



三:关于双引号和单引号

大家在初学PHP的时候,大家都会说,

单引号的性能比双引号好,所以建议大家使用单引号,

这句话是没有错的,但是,我们应该根据实际情况,来选择适合的,例如:

<?php
$num_1 = 1;
$num_2 = 2;
$num_3 = 3;
$num_4 = 4;
$str_1 = '我是一个简单的字符串';
$str_2 = "我是一个简单的字符串";

$str_3 = 'num_1数字为:' . $num_1 . ',num_2数字为:' . $num_2 . ',num_3数字为:' . $num_3 . ',num_4数字为:' . $num_4;
$str_4 = "num_1数字为:{$num_1},num_2数字为:{$num_2},num_3数字为:{$num_3},num_4数字为:{$num_4}";

当字符串包含遍历过多时,可以考虑使用双引号,适当的消耗少量的性能,用于换取代码的可读性

下面是关于单引号,双引号的性能测试:

php5.4-cli:

仙士可博客


php5.6-cli:

仙士可博客


php7.2-cli:

仙士可博客


可看出,单引号和双引号在纯字符串的性能差距是非常少的(测试有误差),而在多变量情况下时,双引号的性能比单引号好了很多,

所以,在变量多的情况下,大胆的使用双引号吧

到这里,还是先说一句:"实践是检验真理的唯一标准";

四:避免在循环里做运算

这个是属于写代码必须掌握的一个东西哦,有些东西,在循环中可以重复使用的,需要在循环外定义,否则会造成非常多的性能浪费

例如:

仙士可博客

仙士可博客



五:全等于和等于

由于php是弱类型语言,php的等于会进行类型转换再进行值比较,这样就会造成额外的性能消耗,所以

在已知需要某类型的情况下,尽量使用全等于

性能测试:

仙士可博客



六:尽量避免php报错

在很多时候,可能大家为了方便,把warning和notice的这些不会影响php执行的错误直接屏蔽,不去管它,

但是,只要发生了报错,在php底层,都是会走php异常流程的(各种底层的错误处理),性能会大大降低,

所以,多使用isset,is_object,is_array等一系列变量判断函数,尽量避免出现错误

性能测试:

仙士可博客


七:及时unset

当大数组处理完毕时,及时的unset回收内存


八:底层做好访问限制

该经验属于业务层面,当某个页面访问会造成大量资源消耗时,尽量的限制访问频率,以免被熊孩子多线程爬取页面把页面爬崩,

例如:限制同一秒时间只能访问该页面5次,超过则限制访问,直到下一秒才可继续访问


九:使用php内置常量代替内置函数

php在启动时,有赋值很多的系统常量,例如PHP_OS,PHP_VERSION等等,可以使用get_defined_constants(true)函数获取所有常量

使用PHP_VERSION代替phpversion()函数

使用PHP_OS代替php_uname('s')函数

以及最常见的使用$_SERVER['REQUEST_TIME']代替time();

测试如下:

仙士可博客
备注:发现5.4的常量比函数慢,果断换成了5.6,可自行尝试


十:将能使用到的模型,变量等,定义在最上方,便于阅读

例如:

<?php

$user_model = M('User');
$log_model = M('Log');

$user_info = $user_model->getInfo();
$agent_info = $user_model->getAgentInfo($user_info['pid']);
$log_model->insertLog();
//巴拉巴拉巴拉

这个只是个人认为的好习惯,便于阅读,这样写的话,看前2行,就知道这个地方会用到哪几个模型,可以大致猜到该段代码的大致逻辑了


十一:尽量使用软删除

设计表的时候,建议所有表都增加几个字段(status字段.add_time(新增时间),update_time(更新状态时间)),用于标识该条数据状态(正常1,已删除2等等)

当需要删除该条记录时,只将status置为已删除状态,而不是真正的去删除它




仙士可博客
请先登录后发表评论
  • 最新评论
  • 总共1条评论
仙士可博客

KIMC:过来膜拜

2018-07-26 11:31:23 回复

  • 本站由白俊遥博客程序搭建
    © 2017-1-17 php20.cn 版权所有 ICP证:闽ICP备17001387号
  • 联系邮箱:1067197739@qq.com