PHP编码的几个最佳实践

来源:互联网 发布:广联达软件官方售价 编辑:程序博客网 时间:2024/06/10 21:48

1.用逗号连接echo字符串

$name='orange';$address='BeiJing';echo 'Hi,'.$name.'! Welcome to '.$address;//慢echo 'Hi,',$name,'! Welcome to ',$address;//快,建议方式

原因可以查看两者的opcode,用逗号的方式和用点号方式的opcode如下

1

2.使用require还是require_once

老问题了,Lerdof N年前就提出来了,建议用require,因为require_once发起少量的stat调用,我们可以通过ab来测试一下效率
#a.php文件

require_once('ClassA.php');require_once('ClassB.php');require_once('ClassC.php');echo 'end';

测试ab -c 10 -n 10000 http://localhost/orange/a.php 同时10个请求共请求10000次,结果如下:

1

#b.php文件

require('ClassA.php');require('ClassB.php');require('ClassC.php');echo 'end';

同样测试测试ab -c 10 -n 10000 http://localhost/orange/b.php 同时10个请求共请求10000次,结果如下:

1

增加了近20的并发量!

3.提前计算循环长度
如下代码

$items=array(0,1,2,3,4,5,6,7,8,9);for($i=0;$i<count($items);$i++) { $temp=$items[$i]*$items[$i]; }

循环是如何执行的?
* $i初始化0,调用count($items)检测,平方;
* $i等于1,调用count($items)检测,平方;
* $i等于2,调用count($items)检测,平方;
* ...........................
count($items)执行了count($items)遍!所以我们提前计算循环长度,实验对比
#a.php文件

$start=microtime(true);$items=array_fill(0,100000,'orange');for($i=0;$i<count($items);$i++) { $temp=$items[$i].$items[$i]; } echo microtime(true)-$start;

执行结果:

1

#b.php文件

$start=microtime(true);$items=array_fill(0,100000,'orange');$count=count($items);for($i=0;$i<$count;$i++) { $temp=$items[$i].$items[$i]; } echo microtime(true)-$start;

执行结果:

1

4.使用foreach、for、while循环数组

老问题了,不解释,在此就上一张表,看表后,你自己选择吧!
10万元素数组PHP循环执行平均时间

foreach    0.0078毫秒while   0.0099毫秒for   0.0105毫秒

5.勿要追求极致的面向对象
面向对象虽然有各种好处,但效率损失是个硬伤。
#a.php文件

/***  属性private,get/set齐全*/class Student{    private $name;    private $age;    public function setAge($age){        $this->age = $age;    }    public function getAge(){        return $this->age;    }    public function setName($name){        $this->name = $name;    }    public function getName(){        return $this->name;    }}$student=new Student();$start=microtime(true);for($i=0;$i<100000;$i++){ $student->setAge($i);}echo microtime(true)-$start;

执行时间

1

#b.php文件

/***  属性public,直接赋值属性*/class Student{    public  $name;    public  $age;}$student=new Student();$start=microtime(true);for($i=0;$i<100000;$i++){ $student->age=$i;}echo microtime(true)-$start;

1

效率提升至3000%..............................

文章来源:http://www.seo0395.com/archives-146

潘军伟博客长期分享一些自己在技术成长道路上的遇到的难题以及解决方案!

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 微店被投诉售假怎么办 微店屏蔽搜索怎么办 在单位辞职保险怎么办 换奶粉期间拉稀怎么办 小孩换奶粉拉肚子怎么办 换奶粉没有过渡怎么办 婴儿换奶粉腹泻怎么办 胎心率超过160怎么办 孕妇饮奶粉上火怎么办 孕妇奶粉上火的怎么办 喝孕妇奶粉上火怎么办 血糖仪开不了机怎么办 小安素太甜孩子不喜欢喝怎么办 宝宝吃山药过敏怎么办 雅培奶粉上火怎么办 奶粉引起的湿疹怎么办 换奶粉宝宝不吃怎么办 宝宝上吐下泻不吃东西怎么办 hm少衣服了怎么办 手机店生意差怎么办 房子装修不交工怎么办 m651cy手机很卡怎么办 荣耀10掉电严重怎么办 华为手机掉电快怎么办 联想拯救者进水怎么办 手机充电充不满怎么办 一体手机鼓包了怎么办 蔻驰的会员怎么办 淘宝网不退款怎么办 淘宝商家欺诈消费者怎么办 淘宝没货了怎么办 天猫店价格欺骗客户怎么办 天猫欺诈消费者怎么办 空调换热器分流不均怎么办 淘宝买家已拍下卖家缺货怎么办 校园网连接不上怎么办 手机侧边裂开了怎么办 荣耀10提示更新怎么办 8848手机闪退怎么办 ios11健康无数据怎么办 打点棒坏了怎么办