递归功能块的最后一条语句执行了多少次? - php

考虑以下演示递归的代码段:

<?php
  function test() {
    static $count = 0;

    $count++;
    echo $count."<br>";
    if($count < 10) {
      test();
    }
    echo "Count Value : ".$count--;
  }

  test();
?>

上面的代码输出如下:

1
2
3
4
5
6
7
8
9
10
Count Value : 10
Count Value : 9
Count Value : 8
Count Value : 7
Count Value : 6
Count Value : 5
Count Value : 4
Count Value : 3
Count Value : 2
Count Value : 1

我希望函数test()的最后一条代码语句即echo "Count Value : ".$count--;仅在if条件在$count = 10;上返回false时执行一次,并且一切都会完成。

但是出乎意料的是,我在变量$count减小的情况下执行了十次。我不明白这是怎么回事?这里的代码流是如何被意外地操纵的?

当在if条件内进行递归函数调用时,即使在if条件失败后,又如何能再调用10次呢?

请给我解释一下。

注意:我没有忘记添加其他内容,我也不想添加。只需解释为什么以及如何仅在打印no后执行最后一条语句。从1到10,并且仅在if条件失败之后。如果if条件返回true,则不会执行。怎么样?

参考方案

我想你忘了其他。

<?php
  function test() {
    static $count = 0;

    $count++;
    echo $count."<br>";
    if($count < 10) {
      test(); // when this call is made, all the code bellow waits for it to return
    } else {
      echo "Count Value : ".$count--;
    }
  }

  test();
?>

发生的情况是,每次在if条件内调用test()时,执行都会停止,直到新调用的test()返回为止。 test()函数仅在$count >= 10时返回。这意味着所有挂起的函数调用将继续。 What is a RECURSIVE Function in PHP?

您的代码可以翻译成这样的东西;

<?php
  function test() {
    static $count = 0;

    $count++;
    echo $count."<br>";
    if($count < 10) {

      static $count = 1;

      $count++;
      echo $count."<br>";
      if($count < 10) {

        static $count = 2;

        $count++;
        echo $count."<br>";
        if($count < 10) {


          // ... the code repeats until the point when $count = 9

        } else {
          echo "Count Value : ".$count--;
        }

      } else {
        echo "Count Value : ".$count--;
      }


    } else {
      echo "Count Value : ".$count--;
    }
  }

  test();
?>

PHP Count数组元素 - php

嗨,有人可以解释为什么这会返回“数组由0个元素组成”。 :$arr = array(1,3,5); $count = count($arr); if ($count = 0) { echo "An array is empty."; } else { echo "An array has $count elements.…

PHP:从函数返回值并直接回显它? - php

这可能是一个愚蠢的问题,但是……的PHPfunction get_info() { $something = "test"; return $something; } html<div class="test"><?php echo get_info(); ?></div> 有没有办…

PHP:将数据从二维数组复制到一维数组的最快方法 - php

我有一个巨大的二维PHP数组,带有500万行。$t = [ [ "id" => 1, "name" => "foo" ], [ "id" => 2, "name" => "bar" ] ]; 现在,我必须将此数组的I…

php-printf和sprintf具有不同的输出 - php

我编写了以下微型php程序来测试printf和sprintf:<?php $str_1 = printf("%x%x%x", 65, 127, 245); $str_2 = sprintf("%x%x%x", 65, 127, 245); echo $str_1 . "\n"; echo $s…

PHP getallheaders替代 - php

我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…