代码1:
if( !(varOfsomeClass->isValid($imParams)) ){
//some function i need to run
}
代码2:
if( (varOfsomeClass->isValid($imParams)) ){
} else {
//some function i need to run
}
更有效率?哪个更好用?
nb:代码1确实更“人性化”
答案 0 :(得分:1)
嗯,我会说示例#1效率更高,但我怀疑这种微优化会在微秒内为你带来性能提升,所以不值得。
请记住,if()
本身会评估为真值/假值传递给它的表达式,因此在大多数情况下添加!
只是多余的。
换句话说,你为什么要这样做:
$number = 1;
if(!$number){}
而不是这个。
$number = 1;
if($number){}
除非您尝试快速输出$number
为false
的内容,否则转到其他内容,使用第一个没有任何意义。
答案 1 :(得分:1)
if( !(varOfsomeClass->isValid($imParams)) ){
//some function i need to run
}
与代码2类型比较时,此类型代码使用Less资源。
答案 2 :(得分:0)
在isValid
返回true的情况下,您似乎没有做任何事情。我建议坚持使用第一个版本,其中只有一个if
语句,原因有多种:
从技术上讲,除了可以保存的JUMP
汇编指令(取决于解释器),两个代码都会有效...如果它使代码不易读,不要试着考虑那些微优化
答案 3 :(得分:0)
一个有趣的问题。 我建议把它放在这个迷你测试套件中测试一下:
$startA = microtime(true);
for($i = 0; $i < 10000; $i++)
{
//Code 1
}
$endA = microtime(true);
unset ($all, $your, $variables);
$startB = microtime(true);
for($i = 0; $i < 10000; $i++)
{
//Code 2
}
$endB = microtime(true);
echo $endA-$startA."<br />";
echo $endB-$startB."<br />";
答案 4 :(得分:0)
它们都是等效的。
第一个需要额外的!
否定语句,第二个需要额外的else
语句。在处理if / else构造时,使用的C代码非常有效。甚至可能是第二个语句将被简化为类似于ast解析器中的第一个函数的情况。
然而,第二个不太可读,我会优先考虑第一个。
答案 5 :(得分:0)
最好使用if取决于您需要返回值的方式,
如果您只需要返回值非条件(反向/错误),您可以使用:
if ( ! varOfsomeClass->isValid( $imParams ) ){
//some function you need to run
}
如果您需要正确(true)返回值,请使用:
if ( varOfsomeClass->isValid( $imParams ) ){
// some function you need to run true
}
如果您需要 true和false(两者)返回值,请使用:
if ( varOfsomeClass->isValid( $imParams ) ){
// some function you need to run true
} else {
// some function you need to run false
}
对于你的说明,不要使用它:
if ( varOfsomeClass->isValid( $imParams ) ){
} else {
//some function you need to run
}
那就是你所谓的“人类”,它就像你很轻但你在黑暗中。 :)