PHP 哪个更快:!!或(布尔)?
Which is faster in PHP: !! or (bool)?
我正在尝试对代码进行微优化,我想知道将变量转换为布尔值的速度更快:
<?php
$a='test';
$result1 = !!$a;
$result2 = (bool)$a;
?>
我不担心代码大小,只担心执行时间。
这里有一些benchmark,但是很没有定论(试了很多次),所以我想知道PHP的源代码中发生了什么,看看是否有不同的处理方式:
<?php
$a = 'test';
for($c=0;$c<3;$c++){
$start = microtime(true);
for($i=0;$i<10000000;$i++){
$result = !!$a;
}
$end = microtime(true);
$delta = $end-$start;
echo '!!: '.$delta.'<br />';
}
$a = 'test';
for($c=0;$c<3;$c++){
$start = microtime(true);
for($i=0;$i<10000000;$i++){
$result = (bool)$a;
}
$end = microtime(true);
$delta = $end-$start;
echo '(bool): '.$delta.'<br />';
}
结果
!!: 0.349671030045
!!: 0.362552021027
!!: 0.351779937744
(bool): 0.346690893173
(bool): 0.36114192009
(bool): 0.373970985413
(bool)$a
表示:将 $a
转换为布尔值。
!!$a
表示:取 $a
,如果它还不是 1,则将其转换为布尔值,然后取结果值并翻转它,然后再次翻转它。
不仅 (bool)
执行速度更快(是的,我已经对它进行了基准测试;不,除非您有数百万次此类操作,否则您不会注意到任何差异),而且它的阅读速度也更快。如果你需要转换类型,就转换类型;不要使用一些 "clever" 骇人听闻的东西,这会使必须阅读您的代码的人感到困惑。
我正在尝试对代码进行微优化,我想知道将变量转换为布尔值的速度更快:
<?php
$a='test';
$result1 = !!$a;
$result2 = (bool)$a;
?>
我不担心代码大小,只担心执行时间。
这里有一些benchmark,但是很没有定论(试了很多次),所以我想知道PHP的源代码中发生了什么,看看是否有不同的处理方式:
<?php
$a = 'test';
for($c=0;$c<3;$c++){
$start = microtime(true);
for($i=0;$i<10000000;$i++){
$result = !!$a;
}
$end = microtime(true);
$delta = $end-$start;
echo '!!: '.$delta.'<br />';
}
$a = 'test';
for($c=0;$c<3;$c++){
$start = microtime(true);
for($i=0;$i<10000000;$i++){
$result = (bool)$a;
}
$end = microtime(true);
$delta = $end-$start;
echo '(bool): '.$delta.'<br />';
}
结果
!!: 0.349671030045
!!: 0.362552021027
!!: 0.351779937744
(bool): 0.346690893173
(bool): 0.36114192009
(bool): 0.373970985413
(bool)$a
表示:将 $a
转换为布尔值。
!!$a
表示:取 $a
,如果它还不是 1,则将其转换为布尔值,然后取结果值并翻转它,然后再次翻转它。
不仅 (bool)
执行速度更快(是的,我已经对它进行了基准测试;不,除非您有数百万次此类操作,否则您不会注意到任何差异),而且它的阅读速度也更快。如果你需要转换类型,就转换类型;不要使用一些 "clever" 骇人听闻的东西,这会使必须阅读您的代码的人感到困惑。