-1

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

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

或者:

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

还想知道如果您使用 @ 抑制警告或通知,它会使评估变慢吗?

感谢您的回答!

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

4

6 回答 6

4

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

于 2010-09-09T13:28:27.183 回答
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

于 2010-09-09T22:53:34.453 回答
2

用 @ 抑制警告确实会减慢速度。isset()应该是去这里的路。

于 2010-09-09T13:27:08.060 回答
0

在 PHP 中没关系

于 2010-09-09T22:57:08.230 回答
0

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

于 2010-09-09T13:45:49.497 回答
-2

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

于 2010-09-09T13:25:43.647 回答