Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 最有效地使用';如果';_Php_Algorithm - Fatal编程技术网

Php 最有效地使用';如果';

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检查值 输入其他部分(可能,或者不执行

代码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检查值
  • 输入其他部分(可能,或者不执行任何操作,因为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
    是否已运行多次?结果可能会有所不同,只有多次跑步才会显示“趋势”。是的,跑了多次之后,你应该有答案:)