函数中的静态变量

时间:2017-03-11 07:50:07

标签: php

我在W3Schools上看到了这一点。

<?php
  function myTest() {
  static $x = 0;
  echo $x;
  $x++;
  }

myTest();
myTest();
myTest();
?>

输出为0,1和2。 我想知道它为什么不是0,0和0。 因为每次调用函数时,变量x再次变为0。

我是一名PHP初学者。谢谢!

2 个答案:

答案 0 :(得分:2)

如果在函数内部声明了var static,则var会将其保留在多个调用中。您可以将它与类中的静态var进行比较。

您发布的代码是查看实际效果的一个很好的示例。但是我只会小心使用静态内部函数,因为大多数情况下,你需要其他地方的静态值,重置值,或其他需要很多逻辑并使代码真的很糟糕的东西。

一个很好的例子是一个函数,它返回给定标识符的唯一标识符。这可以通过使用此代码来实现。

function unique_id($id) {
    static $count = 0;
    return $id . ($id++);
}

答案 1 :(得分:0)

这个例子可能会澄清。 静态具有范围,因此不是全局变量。所以我可以在函数外定义静态$ x,它将在那里定义。由于static具有范围,因此继续执行和重置$ x = 0是没有任何意义的。因此,php将仅在第一次调用该行时才会确认它。

<?php
static $x = 1000;

  function myTest() {
      static $x = 0;
      echo $x;
      $x++;
  }

myTest();
myTest();
myTest();
?>