我想知道什么更慢或更快:
if( @$myvar['test'] === null ) { .. }
或者:
if( !isset( $myvar['test'] )) { .. }
还想知道如果您使用 @ 抑制警告或通知,它会使评估变慢吗?
感谢您的回答!
PS:这不是区别,我知道 isset 检查一个元素是否已设置,而不是它是否为空。但在我的情况下,重要的是知道它是否为空。
我想知道什么更慢或更快:
if( @$myvar['test'] === null ) { .. }
或者:
if( !isset( $myvar['test'] )) { .. }
还想知道如果您使用 @ 抑制警告或通知,它会使评估变慢吗?
感谢您的回答!
PS:这不是区别,我知道 isset 检查一个元素是否已设置,而不是它是否为空。但在我的情况下,重要的是知道它是否为空。
通常,@ 的使用确实会在发生错误情况时产生开销,所以我希望它会更慢......而且我会说使用该语法不太直观。不要试图以牺牲可读性为代价进行微优化
<?
$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
用 @ 抑制警告确实会减慢速度。isset()
应该是去这里的路。
在 PHP 中没关系
顺便说一句,我记得读过一些提示,声称严格测试===
实际上比==
只有一种方法可以确定 - 测试它。