【问题标题】:what is slower or what is faster in PHP: if( @$myvar['test'] === null ) or if( !isset( $myvar['test'] ))PHP 中什么更慢或更快: if( @$myvar['test'] === null ) 或 if( !isset( $myvar['test'] ))
【发布时间】:2010-09-09 13:23:38
【问题描述】:

我想知道什么是慢或快:

if( @$myvar['test'] === null ) { .. }

或:

if( !isset( $myvar['test'] )) { .. }

还想知道如果你用 @ 隐藏警告或通知,它会使评估变慢吗?

感谢您的回答!

PS:这不是区别,我知道 isset 检查一个元素是否已设置,而不是它是否为空。但在我的情况下,重要的是知道它是否为空。

【问题讨论】:

  • !empty( $myvar['test'] ) 怎么样?它检查变量是否已设置且不为空。
  • 除了isset,您还可以将array_key_exists 用于数组。
  • Empty是测试是否为空VALUE,而不是是否赋值。当 $myvar['test'] 包含零 (0) 时,empty 报告它是空的,但它实际上不是空的。报告为 (empty == true): '', "", 0, null。这个函数的名字有点混乱。

标签: php performance evaluation isset


【解决方案1】:

通常,@ 的使用确实会在发生错误情况时产生开销,所以我希望它会更慢......而且我会说使用该语法不太直观。不要试图以牺牲可读性为代价进行微优化

【讨论】:

    【解决方案2】:
    <?
    $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);
    

    结果:
    测试一:0.18865299224854
    测试 2:0.012698173522949
    测试 3:0.11134600639343
    测试4:0.015975952148438

    【讨论】:

    • +1 你必须接受这个答案。这对整个 PHP 社区来说都是一个加分项。
    • 非常感谢您的回答。我接受这个作为答案。 isset 更快。
    【解决方案3】:

    使用 @ 抑制警告确实会减慢速度。 isset() 应该是这里的路。

    【讨论】:

      【解决方案4】:

      顺便说一句,我记得读过一些提示,声称使用 === 进行严格测试实际上比 == 快一点

      【讨论】:

        【解决方案5】:

        在 PHP 中没关系

        【讨论】:

        • @Erwinus 在某种程度上。当我看到这样的废话时,它让我有点发疯。但没关系。感谢您的关心。
        【解决方案6】:

        只有一种方法可以确定 - 测试它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-25
          • 1970-01-01
          • 2010-12-20
          • 2013-03-07
          • 1970-01-01
          • 1970-01-01
          • 2012-11-09
          • 2011-08-11
          相关资源
          最近更新 更多