无法在 PHP 中获取静态声明行为


Unable to get Static declaration behaviour in PHP

    class StaticTester
   {
      private static $id=0;
      function__construct()
     {
          self::$id+=1;
     }
    public static function checkIdFromStaticMethod()
   {
      echo "Current Id from Static method is ".self::$id;
    }

 }
  $st1=new StaticTester();
 StaticTester::checkIdFromStaticMethod();       // this outputs 1.

好的,我不明白为什么输出是1? 毕竟静态意味着值无法更改!

不,静态意味着没有实例,您可能正在寻找常量。

function__construct()
{
    self::id+=1;
}

应该是

function__construct()
{
    self::$id+=1;
}

错过了一个美元符号:)

哎呀。。。。误读了问题。我以为你的代码有错误呵呵。你做到了,但可能只是一个复制/粘贴错误。

变成 1,因为每次创建新对象时它都会递增 1。 并且所有对象共享相同的 id 变量。 这就是静态的含义。

一个永远不能改变的数字称为constant,并在PHP中用关键字const声明。

static并不意味着

该值根本无法更改! 你想要const,或者final(PHP 没有(。 static实际上将保留方法调用之间的值(因为它是成员,所以无论如何都会(。

静态并不意味着

不能更改该值,而是表示该值保存在类级别而不是实例级别。其他语言(如Java(有时将其称为"类变量"。

我认为您在staticfinalconst之间感到困惑.

手动参考:

  • static关键字
  • final关键字
  • 类常量

静态表示:对于所有可能的实例,将使用相同的变量

   function__construct()
     {
          self::$id+=1;
     }
 $st1=new StaticTester();

当做新的时,__construct被调用,所以你的$id静态变量将被使用和增加。你可以做$st 2=new StaticTester(( , StaticTester::checkIdFromStaticMethod(( 将返回 2 !!这就是你的代码在编写时要做的事情。

同意"恒定"的答案。