我想知道什么是更慢或更快:
if( @$myvar['test'] === null ) { .. }
或:
if( !isset( $myvar['test'] )) { .. }
还想知道你是否用@来抑制警告或通知,是否会使评估变慢?
感谢您的回答!
PS:这不是区别,我知道isset检查是否设置了一个元素,而不是它是否为空。但在我的情况下,知道它是否为空是很重要的。
答案 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)
只有一种方法可以确定 - 测试它。