инициализация статической переменной php с помощью ключевого слова $ this - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть метод внутри класса, в котором я хочу инициализировать статическую переменную.

1 /, когда я инициализирую переменную, а затем влияю на это значение, используя ключевое слово $this, оно работает.Например:

class Test {
   // ...
   function test($input_variable)
   {
      static $my_static_variable = null;
      if (!isset($my_static_variable))
        $my_static_variable = $this->someFunction($input_variable);
      // ... some further processing 
   }
}

2 / Однако, когда я пытаюсь напрямую инициализировать / создать переменную с ключевым словом $this, возникает синтаксическая ошибка: unexpected '$this' (T_VARIABLE):

class Test {
       // ...
       function test($input_variable)
       {
          static $my_static_variable = $this->someFunction($input_variable); // *** syntax error, unexpected '$this' (T_VARIABLE)
          // ... some further processing 
       }
}

1 / хороший способ инициализировать статическую переменную?Почему 2 / не разрешено, так как предполагается, что он делает то же самое, что и в 1 /?

Я использую PHP 5.5.21 (cli) (сборка: 22 июля 2016 г. 08:31:09).

Спасибо

Ответы [ 3 ]

0 голосов
/ 26 февраля 2019

Статическая переменная и функция могут быть доступны без создания экземпляра класса.Вы не можете использовать $ this для доступа к переменной или функции, объявленной как static.Вы должны использовать оператор разрешения области :: для доступа к переменной и функциям, объявленным как статические.

Для переменных: -

class A
{
    static $my_static = 'foo';

    public function staticValue() {
        return self::$my_static;// Try to use $this here insted of self:: you will get error
    }
}

class B extends A
{
    public function fooStatic() {
        return parent::$my_static;
    }
}

Для доступа к переменной используйте следующее: -

print A::$my_static

Для функций: -

class A {
    public static function aStaticMethod() {
        // ...
    }
}

Вы можете вызвать функцию следующим образом: -

A::aStaticMethod();
0 голосов
/ 26 февраля 2019

Я думаю, что у меня есть ответ.В php документации указано следующее:

Статические переменные могут быть объявлены, как видно из приведенных выше примеров.В PHP 5.6 вы можете присваивать значения этим переменным, которые являются результатом выражений, , но вы не можете использовать здесь любую функцию, что приведет к ошибке разбора .

ТакЯ полагаю, что это также относится и к PHP 5.5.

Как указал @MagnusEriksson, я мог бы также использовать свойство класса.Однако я не хочу, чтобы к моей переменной обращались где-то еще, кроме метода * 1013.

Кстати, как-то то же самое заявлено для статических свойств в doc :

Статические свойства не могут быть доступны через объект с помощью оператора стрелки ->.

Как и любая другая статическая переменная PHP, статические свойства могут быть толькоинициализируется с использованием литерала или константы до PHP 5.6;выражения не допускаются .В PHP 5.6 и более поздних версиях те же правила применяются к константным выражениям: возможны некоторые ограниченные выражения при условии, что они могут быть вычислены во время компиляции.

0 голосов
/ 26 февраля 2019

Нельзя использовать $this для статической переменной.Вы можете использовать self с оператором разрешения области видимости (: :).

Вот пример:

class Foo {
  public static $my_stat;

  static function init() {
    self::$my_stat= 'My val';
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...