什么是慢的或更快的PHP:if(@ $ myvar ['test'] === null)或if(!isset($ myvar ['test']))

时间:2010-09-09 13:23:38

标签: php performance evaluation isset

我想知道什么是更慢或更快:

if( @$myvar['test'] === null ) { .. }

或:

if( !isset( $myvar['test'] )) { .. }

还想知道你是否用@来抑制警告或通知,是否会使评估变慢?

感谢您的回答!

PS:这不是区别,我知道isset检查是否设置了一个元素,而不是它是否为空。但在我的情况下,知道它是否为空是很重要的。

6 个答案:

答案 0 :(得分:4)

通常使用@会在出现错误情况时产生开销,所以我希望它会慢一些......而且我会说使用该语法不太直观。不要以牺牲可读性为代价进行微观优化

答案 1 :(得分:3)

<?
$myvar = array();

$start = microtime(true);
for($x=0;$x<100000;$x++){

    if( @$myvar['test'] === null ) { }

}
$end = microtime(true);
$duration = $end-$start;
printf("Test 1: %s \n", $duration);


$start = microtime(true);
for($x=0;$x<100000;$x++){

    if( !isset( $myvar['test'] )) {  }

}
$end = microtime(true);
$duration = $end-$start;
printf("Test 2: %s \n", $duration);

// populate 
$myvar['test'] = true;

$start = microtime(true);
for($x=0;$x<100000;$x++){

    if( @$myvar['test'] === null ) { }

}
$end = microtime(true);
$duration = $end-$start;
printf("Test 3: %s \n", $duration);


$start = microtime(true);
for($x=0;$x<100000;$x++){

    if( !isset( $myvar['test'] )) {  }

}
$end = microtime(true);
$duration = $end-$start;
printf("Test 4: %s \n", $duration);

<强>结果:
试验1:0.18865299224854
测试2:0.012698173522949
测试3:0.11134600639343
测试4:0.015975952148438

答案 2 :(得分:2)

使用@抑制警告会减慢速度。 isset()应该是去这里的方式。

答案 3 :(得分:0)

顺便说一句,我记得读过一些提示声称使用===的严格测试实际上比==

快一点的提示

答案 4 :(得分:0)

在PHP中没关系

答案 5 :(得分:-2)

只有一种方法可以确定 - 测试它。