Невозможно получить статическое объявление поведения в PHP - PullRequest
0 голосов
/ 13 января 2012
    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?Ведь статический означает, что значение не может быть изменено!

Ответы [ 5 ]

2 голосов
/ 13 января 2012
1 голос
/ 13 января 2012
function__construct()
{
    self::id+=1;
}

должно быть

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

пропустил знак доллара там:)

упс .... неправильно прочитал вопрос. я думал, что у вас есть ошибка в вашем коде хе-хе. что вы сделали, но, вероятно, просто ошибка копирования / вставки.

становится единица, поскольку увеличивается каждый раз при создании нового объекта. и все объекты имеют одинаковую переменную id. это то, что означает статика.

число, которое никогда не может измениться, называется constant и объявляется с ключевым словом const в php.

0 голосов
/ 13 января 2012

static означает: для всех возможных случаев одна и та же переменная будет использоваться

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

 $st1=new StaticTester();

при создании нового, вызывается __construct, поэтому ваша статическая переменная $ id будет использоваться и увеличиваться.можете ли вы сделать $ st2 = new StaticTester (), StaticTester :: checkIdFromStaticMethod () вернет 2 !!!Это то, что ваш код должен делать так, как написано.

Согласен с «постоянными» ответами.

0 голосов
/ 13 января 2012

Статика не означает, что значение не может быть изменено, это означает, что значение хранится на уровне класса, а не на уровне экземпляра. Другие языки (например, Java) иногда называют это «переменной класса».

Я думаю, вы запутались между static и final или const.

Ручные ссылки:

0 голосов
/ 13 января 2012

static не означает, что значение не может быть изменено вообще!Вы хотите const или final (чего нет у PHP).static фактически сохранит значение между вызовами методов (поскольку это член, в любом случае это будет)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...