Значение общедоступной статической переменной


Я пытаюсь объявить общедоступную статическую переменную, которая представляет собой массив массивов:

class Foo{
 public static $contexts = array(
    'a' => array(
      'aa'              => something('aa'),
      'bb'              => something('bb'),
    ),

    'b' => array(
      'aa'              => something('aa'),
      'bb'              => something('bb'),
    ),

  );

 // methods here

 }

 function something($s){
   return ...
 }

Но я получаю ошибку:

Ошибка синтаксического анализа: ошибка синтаксического анализа, ожидающая `) "в...

Author: Alex, 2011-06-28

1 answers

Вы не можете использовать выражения при объявлении свойств класса. Т.е. вы не можете вызывать something() здесь, вы можете использовать только статические значения. В какой-то момент вам придется установить эти значения по-другому в коде.

Как и любая другая статическая переменная PHP, статические свойства могут быть инициализированы только с помощью литерала или константы; выражения не допускаются. Таким образом, хотя вы можете инициализировать статическое свойство целым числом или массивом (например), вы не можете инициализировать его другой переменной, например функция возвращает значение или объекту.

Http://www.php.net/manual/en/language.oop5.static.php

Например:

class Foo {
    public static $bar = null;

    public static function init() {
       self::$bar = array(...);
    }
}

Foo::init();

Или сделайте это в __construct, если вы собираетесь создать экземпляр класса.

 9
Author: deceze, 2011-06-28 01:55:30