原文摘自:http://orangeholic.iteye.com/blog/1763937
1.用逗号连接echo字符串
-
$name=‘orange‘;
-
$address=‘BeiJing‘;
-
echo ‘Hi,‘.$name.‘! Welcome to ‘.$address;
-
echo ‘Hi,‘,$name,‘! Welcome to ‘,$address;
原因可以查看两者的opcode,用逗号的方式和用点号方式的opcode如下
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次,结果如下:
#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次,结果如下:
增加了近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;
执行结果:
#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;
执行结果:
4.使用foreach、for、while循环数组
老问题了,不解释,在此就上一张表,看表后,你自己选择吧!
10万元素数组PHP循环执行平均时间
foreach 0.0078毫秒
|
while 0.0099毫秒
|
for 0.0105毫秒
|
5.勿要追求极致的面向对象
面向对象虽然有各种好处,但效率损失是个硬伤。
#a.php文件
-
-
-
-
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;
执行时间
#b.php文件
-
-
-
-
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;
效率提升至3000%..............................
PHP编码的几个最佳实践
原文:http://blog.chinaunix.net/uid-7374279-id-5152339.html