Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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 - Fatal编程技术网

Php 在性能方面,哪一个是最好的如果或开关或三元?

Php 在性能方面,哪一个是最好的如果或开关或三元?,php,Php,我是PHP新手 在PHP中有3种条件结构 如果2.3号开关。三元 在这三种方法中,哪一种最能提高程序性能 请告诉我在哪些条件下我们需要优先选择IF或SWITCH或trimal,以及为什么 它是如何根据条件提高性能的?它的执行时间是多少 我做了一个小测试,三元运算符似乎总是比常规if语句慢一点。差别非常小,因此从总体上看,它应该会对应用程序性能产生很大影响 // small data $data['test'] = 1; $start = microtime(); for ($i = 0; $i

我是PHP新手

在PHP中有3种条件结构

  • 如果2.3号开关。三元
  • 在这三种方法中,哪一种最能提高程序性能

    请告诉我在哪些条件下我们需要优先选择IF或SWITCH或trimal,以及为什么


    它是如何根据条件提高性能的?它的执行时间是多少

    我做了一个小测试,三元运算符似乎总是比常规if语句慢一点。差别非常小,因此从总体上看,它应该会对应用程序性能产生很大影响

    // small data
    $data['test'] = 1;
    $start = microtime();
    for ($i = 0; $i < 1000000; $i++) {
      if (true) {
        $tmp = $data['test'];
      }
    }
    microtime() - $start; // 0.529772
    
    $start = microtime();
    for ($i = 0; $i < 1000000; $i++) {
      $tmp = true ? $data['test'] : false;
    }
    microtime() - $start; // 0.591775
    
    // for 'large' data
    $data['test'] = [];
    for ($i = 0; $i < 1000000; $i++) {
      $data['test'][] = $i;
    }
    $start = microtime();
    for ($i = 0; $i < 1000000; $i++) {
      if (true) {
        $tmp = $data['test'];
      }
    }
    microtime() - $start; // 0.181477
    
    $start = microtime();
    for ($i = 0; $i < 1000000; $i++) {
      $tmp = true ? $data['test'] : false;
    }
    microtime() - $start; // 0.277483
    
    //小数据
    $data['test']=1;
    $start=microtime();
    对于($i=0;$i<1000000;$i++){
    如果(真){
    $tmp=$data['test'];
    }
    }
    microtime()-$start;//0.529772
    $start=microtime();
    对于($i=0;$i<1000000;$i++){
    $tmp=true?$data['test']:false;
    }
    microtime()-$start;//0.591775
    //对于“大型”数据
    $data['test']=[];
    对于($i=0;$i<1000000;$i++){
    $data['test'][]=$i;
    }
    $start=microtime();
    对于($i=0;$i<1000000;$i++){
    如果(真){
    $tmp=$data['test'];
    }
    }
    microtime()-$start;//0.181477
    $start=microtime();
    对于($i=0;$i<1000000;$i++){
    $tmp=true?$data['test']:false;
    }
    microtime()-$start;//0.277483
    
    使用任何一种方法都不会出现性能问题。 这取决于使用哪一种方法的情况。 如果条件不是很复杂,则使用三元运算符

    比如:-

    $num = $num == 1?'yes':'no'
    
    最好使用三元运算符来减少代码大小,但对于更复杂的条件,它可能会变得混乱,因此,如果

    开关应在大多数情况下条件相同时使用。 像


    在这种情况下,if应该替换为switch,因为它使代码更干净

    这不是一个有效的答案。。你写了7个字,给了一个可能下周不存在的第三方网站的链接,不会给任何人提供任何价值。我的错,我对这个网站很陌生,我将更新我的答案。在任何情况下,速度差异都将非常小,除非您在一次运行中处理数百万个数据点,否则不会产生任何真正的差异。你基本上是在说一个,过早的优化。我同意@GordonM和Ashwani的观点。如果您得到任何条件,则条件不会成为您的性能问题。代码可读性要重要得多。在上一个例子中,我认为用您感兴趣的值填充数组并在数组中使用是一个更好的选择<代码>如果(在数组中($num,[1,2,3,5,7,11]){/*做点什么*/}它更可读,更简洁。是的,这是一个很好的观点。我认为在这种情况下,在_array()over switch中使用会很好。因为使用any将在执行时间上产生微小的差异。
    if($num == 1 || $num == 2 || $num == 3 || $num == 5 || $num == 7 || $num == 11 ) {
        // do something
    }