Php 最有效地使用';如果';
代码1:Php 最有效地使用';如果';,php,algorithm,Php,Algorithm,代码1: if( !(varOfsomeClass->isValid($imParams)) ){ //some function i need to run } 运行函数是有效的 使用not(!)反转值 用if检查值 代码2: if( (varOfsomeClass->isValid($imParams)) ){ } else { //some function i need to run } 运行函数是有效的 用if检查值 输入其他部分(可能,或者不执行
if( !(varOfsomeClass->isValid($imParams)) ){
//some function i need to run
}
- 运行函数是有效的
- 使用not(!)反转值
- 用if检查值
if( (varOfsomeClass->isValid($imParams)) ){
} else {
//some function i need to run
}
- 运行函数是有效的
- 用if检查值
- 输入其他部分(可能,或者不执行任何操作,因为isValid为true)
注意:代码1确实更“人性化”在
isValid
返回true的情况下,看起来您没有做任何事情。我建议坚持使用第一个版本,因为有多种原因,您只有一个if
语句:
- 代码读起来更少,更容易理解
- 对于其他贡献者来说,留下一个空块可以解释为“代码未完成”
跳转
汇编指令(取决于解释器),这两种代码都将同样有效。。。如果微优化会降低代码的可读性,请不要考虑这些微优化。好吧,我想说示例1更有效,但我怀疑这种微优化会给您带来性能提升,即使是在微秒内也可以测量,所以它不值得
请记住,if()
本身计算传递给它的表达式的真/假值,因此添加代码>仅在大多数情况下是冗余的
换句话说,您为什么需要这样做:
$number = 1;
if(!$number){}
而不是这个
$number = 1;
if($number){}
如果$number
为false
,则除非您试图快速输出某个内容,然后转到其他内容,否则使用第一个是没有任何意义的 一个有趣的问题。
我建议将其放在这个小型测试套件中并进行测试:
$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 />";
$startA=微时间(真);
对于($i=0;$i<10000;$i++)
{
//代码1
}
$endA=微时间(真);
未设置($all,$your,$variables);
$startB=微时间(真);
对于($i=0;$i<10000;$i++)
{
//代码2
}
$endB=微时间(真);
echo$endA-$startA.“
”;
echo$endB-$startB.“
”;
与代码2类型相比,此类型代码使用的资源更少。它们都同样有效
第一个on需要额外的代码>否定语句,第二个on有一个附加的else
语句。php使用的C代码在处理if/else构造时非常有效。甚至可能第二条语句会简化为类似于ast解析器中的第一个函数
但是,第二种方法可读性较差,我更喜欢第一种方法。最佳使用if取决于您需要返回值的方式
如果只需要返回值而不需要条件(反向/假),则可以使用:
if ( ! varOfsomeClass->isValid( $imParams ) ){
//some function you need to run
}
如果需要右(真)返回值,请使用:
if ( varOfsomeClass->isValid( $imParams ) ){
// some function you need to run true
}
if ( varOfsomeClass->isValid( $imParams ) ){
// some function you need to run true
} else {
// some function you need to run false
}
如果需要true和false(两者)返回值,则使用:
if ( varOfsomeClass->isValid( $imParams ) ){
// some function you need to run true
}
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
}
这就是你所谓的“非人类”,就像你是光明的,但你是黑暗的 编写真正可以理解的代码。。这里没有理由担心“最高效”,特别是在PHP环境中。(注意:有些语言有一个,除非
,这是一个倒装的如果
,但是PHP和其他C-ish方言没有。)首先也是最重要的一点是PHP变量以$
开头。第二,你的问题没有任何用处。不要只是为了提问而提问。只需测量是否有差异。是的,确实更改了解释器的编译器:-)0.00024104118347168//using!操作员
0.00018596649169922//使用else
是否已运行多次?结果可能会有所不同,只有多次跑步才会显示“趋势”。是的,跑了多次之后,你应该有答案:)