Jul
02PHP DEFINE(原作者:CS,在此感谢CS同学的帮助)
DEFINE是大家常用的定义常量的方法,但是DEFINE是存在一定的性能问题的。虽然一般的项目中可能会觉得DEFINE也不会很多,影响不是很大。
但是,实际上,由于require的使用和嵌套等,会在不知不觉中引用到很多的DEFINE。 例如,公司某个最近发布的项目中,一个典型的页面会引用到接近400个DEFINE,使用APD进行profiling后会发现DEFINE消耗的CPU非常靠前。
我们进行了一些对比测试:准备了4个php文件
d1.php
<?php
define('D1', 1);
define('D2', 2);
define('D3', 3);
...
?>
define('D1', 1);
define('D2', 2);
define('D3', 3);
...
?>
d2.php
<?php
class d2
{
var $d1 = 1;
var $d2 = 2;
var $d3 = 3;
...
}
?>
class d2
{
var $d1 = 1;
var $d2 = 2;
var $d3 = 3;
...
}
?>
d3.php
<?php
class d3
{
const d1 = 1;
const d2 = 2;
const d3 = 3;
...
}
?>
class d3
{
const d1 = 1;
const d2 = 2;
const d3 = 3;
...
}
?>
s1.php
<?php
$i = 0;
$i += 1;
$i += 1;
$i += 1;
...
?>
$i = 0;
$i += 1;
$i += 1;
$i += 1;
...
?>
每个文件都是重复1000项,以使对比效果明显。
主程序分别requrie这四个文件,对比进行压力测试。对比测试的结果如下:
d1.php - QPS 1050 左右
d2.php - QPS 1300 左右
d3.php - QPS 2500 左右
s1.php - QPS 3500 左右
d2.php - QPS 1300 左右
d3.php - QPS 2500 左右
s1.php - QPS 3500 左右
结论:
很明显,DEFINE的性能是最差的,而且对比来看,是非常的差。 因此,建议在需要定义常量的地方,可以建立一个专门的常量类。
测试环境:
apache 2.0.59 php 5.2.1
HP DL360 XEON 3.0G*2 2G








